augment void topLevelMethod() {
augment super();
}

augment void topLevelMethodError() {
augment int local;
augment;
}


augment List<int> get topLevelProperty {
return [... augment super, augment super[0]];
}

augment void set topLevelProperty(List<int> value) {
augment super[0] = value[1];
augment super = value;
}

void injectedTopLevelMethod() {
augment super();
augment super;
augment int local;
augment;
}

augment class Class {
augment void instanceMethod() {
augment super();
}

augment void instanceMethodErrors() {
augment int local;
augment;
}

augment int get instanceProperty {
augment super++;
--augment super;
return -augment super;
}

augment void set instanceProperty(int value) {
augment super = value;
}

void injectedInstanceMethod() {
augment super();
augment super;
augment int local;
augment;
}
}

augment[KeywordToken] void[KeywordToken] topLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
}[SimpleToken]

augment[KeywordToken] void[KeywordToken] topLevelMethodError[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
augment[KeywordToken];[SimpleToken]
}[SimpleToken]


augment[KeywordToken] List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] get[KeywordToken] topLevelProperty[StringToken] {[BeginToken]
return[KeywordToken] [[BeginToken]...[SimpleToken] augment[KeywordToken] super[KeywordToken],[SimpleToken] augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken]][SimpleToken];[SimpleToken]
}[SimpleToken]

augment[KeywordToken] void[KeywordToken] set[KeywordToken] topLevelProperty[StringToken]([BeginToken]List[StringToken]<[BeginToken]int[StringToken]>[SimpleToken] value[StringToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken][[BeginToken]0[StringToken]][SimpleToken] =[SimpleToken] value[StringToken][[BeginToken]1[StringToken]][SimpleToken];[SimpleToken]
augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
}[SimpleToken]

void[KeywordToken] injectedTopLevelMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
augment[KeywordToken] super[KeywordToken];[SimpleToken]
augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
augment[KeywordToken];[SimpleToken]
}[SimpleToken]

augment[KeywordToken] class[KeywordToken] Class[StringToken] {[BeginToken]
augment[KeywordToken] void[KeywordToken] instanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
}[SimpleToken]

augment[KeywordToken] void[KeywordToken] instanceMethodErrors[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
augment[KeywordToken];[SimpleToken]
}[SimpleToken]

augment[KeywordToken] int[StringToken] get[KeywordToken] instanceProperty[StringToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken]++[SimpleToken];[SimpleToken]
--[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
return[KeywordToken] -[SimpleToken]augment[KeywordToken] super[KeywordToken];[SimpleToken]
}[SimpleToken]

augment[KeywordToken] void[KeywordToken] set[KeywordToken] instanceProperty[StringToken]([BeginToken]int[StringToken] value[StringToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken] =[SimpleToken] value[StringToken];[SimpleToken]
}[SimpleToken]

void[KeywordToken] injectedInstanceMethod[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
augment[KeywordToken] super[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
augment[KeywordToken] super[KeywordToken];[SimpleToken]
augment[KeywordToken] int[StringToken] local[StringToken];[SimpleToken]
augment[KeywordToken];[SimpleToken]
}[SimpleToken]
}[SimpleToken][SimpleToken]
