set flag OurSyncCollections. !include once #1034831 // Gazelle 22 Function Include for Testing svoid test_leftArrowScript_objectScope(LASMultiClassLoader cl default new LASMultiClassLoader(mc())) { // Accessing an instance field S classPrefix = "scriptClasses."; embedded O runScript(S code) { var parser = enableScaffolding(new GazelleV_LeftArrowScriptParser() .classDefPrefix(classPrefix) .lasClassLoader(cl)); ret leftArrowVerbose(parser, code); } // Access instance field without "this" assertEqualsVerbose(10, runScript([[ class X { i: int <- 5 def j { i plus i } } new X, j ]])); // Make sure locally declared variables shadow fields assertEqualsVerbose(14, runScript([[ class X { i: int <- 5 def j { i: int <- 7; i plus i } } new X, j ]])); // Assign instance field without "this" assertEqualsVerbose(10, runScript([[ class X { i: int def j { i <- 10; this } } new X, j, i ]])); // Assign instance field in superclass without "this" assertEqualsVerbose(10, runScript([[ class X { i: int } class Y extends X { def j { i <- 10; this } } new Y, j, i ]])); // Call instance method without "this" assertEqualsVerbose(2, runScript([[ class X { i: int <- 1 def yo { i <- i plus 1 } def j { yo; i } } new X, j ]])); // Same with arguments and return value assertEqualsVerbose(6, runScript([[ class X { i: int <- 1 def yo x { i <- i plus x; this } def j { yo 5, i } } new X, j ]])); // Method shadows global function (TODO) /*assertEqualsVerbose(6, runScript([[ class X { } new X, j ]]));*/ }