Full Code of wkgcass/Latte-lang for AI

master a2ec38153041 cached
355 files
3.3 MB
885.7k tokens
3936 symbols
1 requests
Download .txt
Showing preview only (3,562K chars total). Download the full file or copy to clipboard to get everything.
Repository: wkgcass/Latte-lang
Branch: master
Commit: a2ec38153041
Files: 355
Total size: 3.3 MB

Directory structure:
gitextract_gohkibfx/

├── .gitignore
├── LICENSE
├── README.md
├── TODO.md
├── build.py
├── latte-build/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   └── lt/
│           │       └── repl/
│           │           ├── CtrlCHandler.java
│           │           ├── CtrlCHandlerImpl.java
│           │           ├── Entry.java
│           │           ├── IO.java
│           │           ├── JLineStringReader.java
│           │           ├── REPL.java
│           │           ├── SimpleStringReader.java
│           │           ├── StringReader.java
│           │           └── VersionRetriever.java
│           └── resources/
│               └── version
├── latte-class-recorder/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── groovy/
│           │   └── org/
│           │       └── lattelang/
│           │           └── ClassRecorder.groovy
│           └── resources/
│               └── META-INF/
│                   └── gradle-plugins/
│                       └── org.latte-lang.class-recorder.properties
├── latte-compiler/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── lt/
│       │   │       ├── compiler/
│       │   │       │   ├── AbstractScanner.java
│       │   │       │   ├── BraceScanner.java
│       │   │       │   ├── CodeGenerator.java
│       │   │       │   ├── CodeInfo.java
│       │   │       │   ├── CompileException.java
│       │   │       │   ├── CompileUtil.java
│       │   │       │   ├── ErrorManager.java
│       │   │       │   ├── IndentScanner.java
│       │   │       │   ├── LineCol.java
│       │   │       │   ├── LtBug.java
│       │   │       │   ├── MultipleClassLoader.java
│       │   │       │   ├── Parser.java
│       │   │       │   ├── Properties.java
│       │   │       │   ├── PushLineBackReader.java
│       │   │       │   ├── SClassWriter.java
│       │   │       │   ├── Scanner.java
│       │   │       │   ├── ScannerSwitcher.java
│       │   │       │   ├── SemanticProcessor.java
│       │   │       │   ├── SemanticScope.java
│       │   │       │   ├── SyntaxException.java
│       │   │       │   ├── UnexpectedEndException.java
│       │   │       │   ├── UnexpectedTokenException.java
│       │   │       │   ├── lexical/
│       │   │       │   │   ├── Args.java
│       │   │       │   │   ├── Element.java
│       │   │       │   │   ├── ElementStartNode.java
│       │   │       │   │   ├── EndingNode.java
│       │   │       │   │   ├── IllegalIndentationException.java
│       │   │       │   │   ├── Indent.java
│       │   │       │   │   ├── Node.java
│       │   │       │   │   ├── PairEntry.java
│       │   │       │   │   └── TokenType.java
│       │   │       │   ├── semantic/
│       │   │       │   │   ├── ConstantValue.java
│       │   │       │   │   ├── DummyValue.java
│       │   │       │   │   ├── ExceptionTable.java
│       │   │       │   │   ├── Ins.java
│       │   │       │   │   ├── Instruction.java
│       │   │       │   │   ├── InvokableMeta.java
│       │   │       │   │   ├── LeftValue.java
│       │   │       │   │   ├── LocalVariable.java
│       │   │       │   │   ├── MethodTypeValue.java
│       │   │       │   │   ├── PointerType.java
│       │   │       │   │   ├── PrimitiveTypeDef.java
│       │   │       │   │   ├── PrimitiveValue.java
│       │   │       │   │   ├── ReadOnly.java
│       │   │       │   │   ├── SAnno.java
│       │   │       │   │   ├── SAnnoDef.java
│       │   │       │   │   ├── SAnnoField.java
│       │   │       │   │   ├── SAnnotationPresentable.java
│       │   │       │   │   ├── SArrayTypeDef.java
│       │   │       │   │   ├── SArrayValue.java
│       │   │       │   │   ├── SClassDef.java
│       │   │       │   │   ├── SConstructorDef.java
│       │   │       │   │   ├── SFieldDef.java
│       │   │       │   │   ├── SInterfaceDef.java
│       │   │       │   │   ├── SInvokable.java
│       │   │       │   │   ├── SMember.java
│       │   │       │   │   ├── SMethodDef.java
│       │   │       │   │   ├── SModifier.java
│       │   │       │   │   ├── SParameter.java
│       │   │       │   │   ├── SRefTypeDef.java
│       │   │       │   │   ├── STypeDef.java
│       │   │       │   │   ├── Value.java
│       │   │       │   │   ├── ValueAnotherType.java
│       │   │       │   │   ├── ValuePack.java
│       │   │       │   │   ├── VoidType.java
│       │   │       │   │   ├── builtin/
│       │   │       │   │   │   ├── BoolTypeDef.java
│       │   │       │   │   │   ├── BoolValue.java
│       │   │       │   │   │   ├── ByteTypeDef.java
│       │   │       │   │   │   ├── ByteValue.java
│       │   │       │   │   │   ├── CharTypeDef.java
│       │   │       │   │   │   ├── CharValue.java
│       │   │       │   │   │   ├── DoubleTypeDef.java
│       │   │       │   │   │   ├── DoubleValue.java
│       │   │       │   │   │   ├── EnumValue.java
│       │   │       │   │   │   ├── FloatTypeDef.java
│       │   │       │   │   │   ├── FloatValue.java
│       │   │       │   │   │   ├── IntTypeDef.java
│       │   │       │   │   │   ├── IntValue.java
│       │   │       │   │   │   ├── LongTypeDef.java
│       │   │       │   │   │   ├── LongValue.java
│       │   │       │   │   │   ├── NullTypeDef.java
│       │   │       │   │   │   ├── NullValue.java
│       │   │       │   │   │   ├── ShortTypeDef.java
│       │   │       │   │   │   ├── ShortValue.java
│       │   │       │   │   │   └── StringConstantValue.java
│       │   │       │   │   └── helper/
│       │   │       │   │       ├── ASTGHolder.java
│       │   │       │   │       └── HalfAppliedTypes.java
│       │   │       │   ├── syntactic/
│       │   │       │   │   ├── AST.java
│       │   │       │   │   ├── Definition.java
│       │   │       │   │   ├── DuplicateVariableNameException.java
│       │   │       │   │   ├── Expression.java
│       │   │       │   │   ├── Literal.java
│       │   │       │   │   ├── Operation.java
│       │   │       │   │   ├── Pre.java
│       │   │       │   │   ├── Statement.java
│       │   │       │   │   ├── UnexpectedNewLayerException.java
│       │   │       │   │   ├── UnknownTokenException.java
│       │   │       │   │   ├── def/
│       │   │       │   │   │   ├── AnnotationDef.java
│       │   │       │   │   │   ├── ClassDef.java
│       │   │       │   │   │   ├── FunDef.java
│       │   │       │   │   │   ├── InterfaceDef.java
│       │   │       │   │   │   ├── MethodDef.java
│       │   │       │   │   │   ├── ObjectDef.java
│       │   │       │   │   │   └── VariableDef.java
│       │   │       │   │   ├── literal/
│       │   │       │   │   │   ├── BoolLiteral.java
│       │   │       │   │   │   ├── NumberLiteral.java
│       │   │       │   │   │   └── StringLiteral.java
│       │   │       │   │   ├── operation/
│       │   │       │   │   │   ├── OneVariableOperation.java
│       │   │       │   │   │   ├── TwoVariableOperation.java
│       │   │       │   │   │   └── UnaryOneVariableOperation.java
│       │   │       │   │   └── pre/
│       │   │       │   │       ├── Import.java
│       │   │       │   │       ├── Modifier.java
│       │   │       │   │       └── PackageDeclare.java
│       │   │       │   └── util/
│       │   │       │       ├── BindList.java
│       │   │       │       ├── Consts.java
│       │   │       │       └── LocalVariables.java
│       │   │       ├── dependencies/
│       │   │       │   ├── asm/
│       │   │       │   │   ├── AnnotationVisitor.java
│       │   │       │   │   ├── AnnotationWriter.java
│       │   │       │   │   ├── Attribute.java
│       │   │       │   │   ├── ByteVector.java
│       │   │       │   │   ├── ClassReader.java
│       │   │       │   │   ├── ClassVisitor.java
│       │   │       │   │   ├── ClassWriter.java
│       │   │       │   │   ├── Context.java
│       │   │       │   │   ├── Edge.java
│       │   │       │   │   ├── FieldVisitor.java
│       │   │       │   │   ├── FieldWriter.java
│       │   │       │   │   ├── Frame.java
│       │   │       │   │   ├── Handle.java
│       │   │       │   │   ├── Handler.java
│       │   │       │   │   ├── Item.java
│       │   │       │   │   ├── Label.java
│       │   │       │   │   ├── MethodVisitor.java
│       │   │       │   │   ├── MethodWriter.java
│       │   │       │   │   ├── Opcodes.java
│       │   │       │   │   ├── Type.java
│       │   │       │   │   ├── TypePath.java
│       │   │       │   │   ├── TypeReference.java
│       │   │       │   │   ├── package.html
│       │   │       │   │   └── signature/
│       │   │       │   │       ├── SignatureReader.java
│       │   │       │   │       ├── SignatureVisitor.java
│       │   │       │   │       ├── SignatureWriter.java
│       │   │       │   │       └── package.html
│       │   │       │   └── package-info.java
│       │   │       ├── generator/
│       │   │       │   ├── AbstractSourceGenerator.java
│       │   │       │   └── SourceGenerator.java
│       │   │       ├── lang/
│       │   │       │   ├── FunctionalAbstractClass.java
│       │   │       │   ├── FunctionalInterface.java
│       │   │       │   ├── GenericTemplate.java
│       │   │       │   ├── Pointer.java
│       │   │       │   ├── Unit.java
│       │   │       │   ├── ast.java
│       │   │       │   ├── function/
│       │   │       │   │   ├── Function.java
│       │   │       │   │   ├── Function0.java
│       │   │       │   │   ├── Function1.java
│       │   │       │   │   ├── Function10.java
│       │   │       │   │   ├── Function11.java
│       │   │       │   │   ├── Function12.java
│       │   │       │   │   ├── Function13.java
│       │   │       │   │   ├── Function14.java
│       │   │       │   │   ├── Function15.java
│       │   │       │   │   ├── Function16.java
│       │   │       │   │   ├── Function17.java
│       │   │       │   │   ├── Function18.java
│       │   │       │   │   ├── Function19.java
│       │   │       │   │   ├── Function2.java
│       │   │       │   │   ├── Function20.java
│       │   │       │   │   ├── Function21.java
│       │   │       │   │   ├── Function22.java
│       │   │       │   │   ├── Function23.java
│       │   │       │   │   ├── Function24.java
│       │   │       │   │   ├── Function25.java
│       │   │       │   │   ├── Function26.java
│       │   │       │   │   ├── Function3.java
│       │   │       │   │   ├── Function4.java
│       │   │       │   │   ├── Function5.java
│       │   │       │   │   ├── Function6.java
│       │   │       │   │   ├── Function7.java
│       │   │       │   │   ├── Function8.java
│       │   │       │   │   └── Function9.java
│       │   │       │   ├── implicit/
│       │   │       │   │   ├── CollectionImplicit.java
│       │   │       │   │   ├── ObjectImplicit.java
│       │   │       │   │   ├── PrimitivesImplicit.java
│       │   │       │   │   ├── RichBool.java
│       │   │       │   │   ├── RichByte.java
│       │   │       │   │   ├── RichChar.java
│       │   │       │   │   ├── RichDouble.java
│       │   │       │   │   ├── RichFloat.java
│       │   │       │   │   ├── RichInt.java
│       │   │       │   │   ├── RichLong.java
│       │   │       │   │   ├── RichObject.java
│       │   │       │   │   ├── RichShort.java
│       │   │       │   │   ├── RichString.java
│       │   │       │   │   ├── StringImplicit.java
│       │   │       │   │   └── collection/
│       │   │       │   │       ├── RichIterable.java
│       │   │       │   │       ├── RichList.java
│       │   │       │   │       ├── RichMap.java
│       │   │       │   │       └── RichSet.java
│       │   │       │   └── js.java
│       │   │       ├── repl/
│       │   │       │   ├── ClassPathLoader.java
│       │   │       │   ├── Compiler.java
│       │   │       │   ├── Evaluator.java
│       │   │       │   ├── Run.java
│       │   │       │   ├── ScriptCompiler.java
│       │   │       │   └── scripting/
│       │   │       │       ├── CL.java
│       │   │       │       ├── Config.java
│       │   │       │       ├── EvalEntry.java
│       │   │       │       ├── LatteContext.java
│       │   │       │       ├── LatteEngine.java
│       │   │       │       ├── LatteEngineFactory.java
│       │   │       │       ├── LatteScope.java
│       │   │       │       └── package-info.java
│       │   │       ├── runtime/
│       │   │       │   ├── Dynamic.java
│       │   │       │   ├── ExceptionContainer.java
│       │   │       │   ├── Implicit.java
│       │   │       │   ├── ImplicitImports.java
│       │   │       │   ├── LambdaGen.java
│       │   │       │   ├── LatteFun.java
│       │   │       │   ├── LatteObject.java
│       │   │       │   ├── LtIterator.java
│       │   │       │   ├── LtRuntime.java
│       │   │       │   ├── LtRuntimeException.java
│       │   │       │   ├── MatchError.java
│       │   │       │   ├── StaticImports.java
│       │   │       │   └── Wrapper.java
│       │   │       └── util/
│       │   │           ├── RangeList.java
│       │   │           └── Utils.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── services/
│       │       │       └── javax.script.ScriptEngineFactory
│       │       ├── build.lts.template
│       │       └── run.lts.template
│       └── test/
│           ├── java/
│           │   ├── SimpleTest.java
│           │   ├── lt/
│           │   │   ├── LatteObjectOutputStream.java
│           │   │   ├── RepeatRule.java
│           │   │   ├── compiler/
│           │   │   │   ├── AnnoAnno.java
│           │   │   │   ├── AnnotationTest.java
│           │   │   │   ├── F.java
│           │   │   │   ├── MyAnno.java
│           │   │   │   ├── TestAllKindsOfAnnos.java
│           │   │   │   ├── TestLambdaFunc.java
│           │   │   │   ├── cases/
│           │   │   │   │   ├── TestAnnotations.java
│           │   │   │   │   ├── TestBraceScanner.java
│           │   │   │   │   ├── TestCodeGen.java
│           │   │   │   │   ├── TestDefineAnnotations.java
│           │   │   │   │   ├── TestDemo.java
│           │   │   │   │   ├── TestDotPackage.java
│           │   │   │   │   ├── TestLambdaGen.java
│           │   │   │   │   ├── TestLang.java
│           │   │   │   │   ├── TestOptimizePointer.java
│           │   │   │   │   ├── TestParser.java
│           │   │   │   │   ├── TestParserMix.java
│           │   │   │   │   ├── TestPrimitiveOperators.java
│           │   │   │   │   ├── TestScanner.java
│           │   │   │   │   ├── TestScannerLayerControl.java
│           │   │   │   │   ├── TestScannerSwitcher.java
│           │   │   │   │   ├── TestSemantic.java
│           │   │   │   │   ├── TestSynchronized.java
│           │   │   │   │   └── anno/
│           │   │   │   │       ├── TestConstructorAnno.java
│           │   │   │   │       ├── TestFieldAnno.java
│           │   │   │   │       ├── TestMethodAnno.java
│           │   │   │   │       ├── TestParamAnno.java
│           │   │   │   │       └── TestTypeAnno.java
│           │   │   │   ├── err_rec/
│           │   │   │   │   ├── TestParserErrorRecovery.java
│           │   │   │   │   ├── TestScannerErrorRecovery.java
│           │   │   │   │   └── TestSemanticError.java
│           │   │   │   └── functionalInterfaces/
│           │   │   │       ├── BoolParamReturnUnit.java
│           │   │   │       ├── ByteParamReturnUnit.java
│           │   │   │       ├── CharParamReturnUnit.java
│           │   │   │       ├── DoubleParamReturnUnit.java
│           │   │   │       ├── FloatParamReturnUnit.java
│           │   │   │       ├── IntParamReturnInt.java
│           │   │   │       ├── IntParamReturnUnit.java
│           │   │   │       ├── LongParamReturnUnit.java
│           │   │   │       ├── NoParamReturnBool.java
│           │   │   │       ├── NoParamReturnByte.java
│           │   │   │       ├── NoParamReturnChar.java
│           │   │   │       ├── NoParamReturnDouble.java
│           │   │   │       ├── NoParamReturnFloat.java
│           │   │   │       ├── NoParamReturnInt.java
│           │   │   │       ├── NoParamReturnLong.java
│           │   │   │       ├── NoParamReturnShort.java
│           │   │   │       ├── NoParamReturnUnit.java
│           │   │   │       └── ShortParamReturnUnit.java
│           │   │   ├── generator/
│           │   │   │   └── TestJsSupport.java
│           │   │   └── repl/
│           │   │       ├── TestBugsInEval.java
│           │   │       ├── TestEvaluator.java
│           │   │       ├── TestGenericInREPL.java
│           │   │       ├── TestJsr223.java
│           │   │       ├── TestScript.java
│           │   │       └── VariableTest.java
│           │   └── suite/
│           │       └── Suite.java
│           └── resources/
│               ├── lang-demo/
│               │   ├── advanced.lt
│               │   ├── examples/
│               │   │   └── rational.lt
│               │   ├── fun.lt
│               │   ├── list-map.lts
│               │   ├── literals.lts
│               │   ├── ltFileStructure.lt
│               │   ├── operator.lt
│               │   ├── statements.lts
│               │   └── typeDef.lt
│               ├── test_require.lts
│               └── test_require2.lts
├── latte-gradle-plugin/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── groovy/
│           │   └── org/
│           │       └── lattelang/
│           │           ├── LatteGradlePlugin.groovy
│           │           └── LoaderUtil.java
│           ├── java/
│           │   └── org/
│           │       └── lattelang/
│           │           ├── DefaultLatteSourceSet.java
│           │           └── LatteSourceSet.java
│           └── resources/
│               └── META-INF/
│                   └── gradle-plugins/
│                       └── latte.properties
├── latte-idea-plugin/
│   ├── .gitignore
│   ├── resources/
│   │   └── META-INF/
│   │       └── plugin.xml
│   └── src/
│       └── org/
│           └── lattelang/
│               └── idea/
│                   ├── Consts.java
│                   ├── LatteFileType.java
│                   ├── LatteFileTypeFactory.java
│                   ├── LatteLanguage.java
│                   ├── highlighter/
│                   │   ├── LatteSyntaxHighlighter.java
│                   │   └── LatteSyntaxHighlighterFactory.java
│                   └── psi/
│                       ├── LatteElementType.java
│                       ├── LatteTokenTypes.java
│                       └── latte.flex
├── latte-library/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       ├── main/
│       │   └── latte/
│       │       ├── async/
│       │       │   └── lt/
│       │       │       └── async/
│       │       │           └── async.lt
│       │       └── dsl/
│       │           └── lt/
│       │               └── dsl/
│       │                   └── html.lt
│       └── test/
│           ├── java/
│           │   └── lt/
│           │       └── library/
│           │           └── TestLibraries.java
│           └── latte/
│               ├── test_async.lt
│               └── test_html.lt
└── mannual-zh.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# macos #
*/.DS_Store
.DS_Store

*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# idea #
*.iml

# sh and bat #
/latte
/latte.bat
build/*

# gradle #
.gradle/*


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2016 KuiGang Wang

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# Latte-Lang

[![Join the chat at https://gitter.im/latte-lang/Lobby](https://badges.gitter.im/latte-lang/Lobby.svg)](https://gitter.im/latte-lang/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

<img src ="http://latte-lang.org/static/Latte-lang-logo-large.png" width=50px>

Latte is a JVM language. It's highly readable and extensible.

[Syntax Mannual (NEW)](https://github.com/wkgcass/Latte-lang/blob/master/mannual-zh.md)  
[Latte WebSite](http://latte-lang.org/)

`Atom` Extensions :

[atom-latte-lang-highlighting](https://atom.io/packages/Atom-Latte-lang-Highlighting)  
[atom-latte-lang-ide](https://atom.io/packages/atom-latte-lang-ide)

`Gradle` Plugin :

[latte-gradle-plugin](#gradle-plugin)

## 中文版戳[这里](#readme-ch)

### Latte supports

* Operator Binding
* DSL
* Data Class
* Pattern Matching
* Inner Method
* Lambda and High-Order Function
* JSON Literal
* Regular Expression
* Read Eval Print Loop
* Compiling to JavaScript
* Latte Gradle Plugin
* JSR 223
* many other features

`Latte` is based on java 6. It's compiled to JVM byte code, and can collaborate with any java library.

# How to build

`JDK 1.6` or higher is the only thing required.

The project is managed by `Gradle`, you can use `Gradle 2.12` (or higher) to build automatically  
A build script is also provided.

clone the repository, and run

	./build.py

You will get a shell scripts. The shell scripts can help you run the `repl`.

>The build script does not support windows. Please follow the order (latte-[class-recorder | compiler | gradle-plugin | library | build]) to run `gradle clean latteBuild` in each directory, then extract `build/distributions/latte-${version}.zip` in module `latte-build`, the shell script is in the `bin` directory.


run:

	./latte

then the [REPL](https://github.com/wkgcass/Latte-lang/blob/master/latte-build/src/main/java/lt/repl/REPL.java) starts

	Welcome to Latte lang
	Type in expressions and double Enter to have them evaluated.
	Type :help for more information.
	for syntax help, please visit https://github.com/wkgcass/Latte-lang/

    lt> 1+1
      |
    res0 : java.lang.Integer = 2

    lt>

# Compile `lt` Files

There are two ways of compiling `lt` files

* use program command

		latte -c <source-directory>

	the detailed commands and options can be found in

		latte -help

or:

* start the `REPL` interpreter, and construct a `Compiler`

		compiler = Compiler()

	use `>>` operator to specify output directory

		compiler >> '...'
		// or
		compiler >> File('...')

	use `+` operator to add class-path

		compiler + '...'

	use `compile MAP` to specify source codes to be compiled and start compiling

		compiler compile ['fileName':FileObject]

	usually `filesInDirectory('...', regex)` is used, e.g.

		compiler compile filesInDirectory('...', '.\*\\.lt'.r)

	these method invocations can be chained up

		Compiler() + '...cp...' >> '...output...' compile filesInDirectory('...source...', '.\*\\.lt'.r)

	You can write a `script` to configure the settings. Check [build.lts.template](https://github.com/wkgcass/Latte-lang/blob/master/latte-compiler/src/main/resources/build.lts.template) for more info.

# Scripts

* you can run a script directly

		latte -s script-location script-arguments...

or:

* start the `REPL` interpreter  
	type `:script <script file>` and Enter

	then use `script run` or `script run ['string array']` to run the script

# JSR 223

Latte-lang supports JSR 223 specification. Use `getEngineByName("Latte-lang")` to retrieve the scripting engine.  

```java
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Latte-lang");
Object result = engine.eval("a = 1 + 3");
System.out.println(engine.get("a"));
```

Since Latte-lang is a compiling language, and it's directly compiled to JVM byte code, you could even use the scripting engine in Latte source codes.

```
engine = ScriptEngineManager().getEngineByName("Latte-lang")
result = engine eval "a = 1 + 3"
.println result
.println engine.a
```

<h1 id='gradle-plugin'>Gradle Plugin</h1>

A plugin for `Gradle` is provided, which helps you compile latte source codes.

### How to use

### step1

add the plugin configuration:

```groovy
buildscript {
    dependencies {
        classpath 'org.latte-lang:latte-gradle-plugin:$VERSION'
    }
}

apply plugin: 'latte'

sourceSets {
    main {
        java
        latte.srcDirs = ['src/main/latte']
        resources
    }
    test {
        java
        latte
        resources
    }
}

latteConfig {
    afterJava = true
    afterGroovy = false
    fastFail = false
}
```

> all configurations are optional

The plugin adds `compileLatte` and `compileTestLatte` tasks, where `compileLatte` is before `classes` task, and `compileTestLatte` is before `testClasses` task

### step2
create a folder named `latte` in the same parent directory. The directory tree should be:

	src
	├── main
	│   ├── java
	│   │   └── \*.java    ; java source
	│   ├── latte
	│   │   └── \*.lt      ; latte source
	│   └── resources
	│       │── \*.lts     ; latte scripts
	│       └── other resources
	└── test
	    ├── java
	    │   └── \*.java
	    ├── latte
	    │   └── \*.lt
	    └── resources
	        ├── \*.lts
	        └── other resources

### step3
run

	gradle clean jar

# Syntax

visit the [Latte WebSite](http://latte-lang.org/)

or read the [mannual](https://github.com/wkgcass/Latte-lang/blob/master/mannual-zh.md)

<h1 id='readme-ch'>中文版 Chinese Version README</h1>

Latte是一种JVM编程语言。 它非常可读,同时也非常可扩展。

[语法规则](https://github.com/wkgcass/Latte-lang/blob/master/mannual-zh.md)  
[Latte 主页](http://latte-lang.org/)

`Atom`上的扩展插件:

[atom-latte-lang-highlighting](https://atom.io/packages/Atom-Latte-lang-Highlighting)  
[atom-latte-lang-ide](https://atom.io/packages/atom-latte-lang-ide)

`Gradle` Plugin :

[latte-gradle-plugin](#gradle-plugin-ch)

### Latte 支持如下功能

* 运算符绑定
* DSL
* Data Class
* 模式匹配
* 内部方法
* Lambda 和 高阶函数
* JSON 字面量
* 正则表达式
* Read Eval Print Loop
* 编译到JavaScript
* Latte Gradle Plugin
* JSR 223
* 许多其它特性

`Latte`基于java6。它被编译到JVM字节码,可以与任何Java类库完美互通。

# 如何构建工程

环境仅仅需要 `JDK 1.6` 或更高

本工程使用 `Gradle` 进行管理,所以您也可以使用 `Gradle 2.12`(或更高) 进行自动Build  
此外还提供了一个Build脚本

clone这个仓库,然后执行

	./build.py

你将会获取一个shell脚本, shell脚本可以快捷地开启`repl`.

>构建脚本不支持windows,请按latte-[class-recorder | compiler | gradle-plugin | library | build]顺序依次进入目录执行`gradle clean latteBuild`,并解压`latte-build`模块的`build/distributions/latte-${version}.zip`,其中的bin目录为shell脚本。

执行:

	./latte

接着, [REPL](https://github.com/wkgcass/Latte-lang/blob/master/latte-build/src/main/java/lt/repl/REPL.java) 将开始运行

	Welcome to Latte lang
	Type in expressions and double Enter to have them evaluated.
	Type :help for more information.
	for syntax help, please visit https://github.com/wkgcass/Latte-lang/

    lt> 1+1
      |
    res0 : java.lang.Integer = 2

    lt>

# 编译 `lt` 文件

* 使用程序命令

		latte -c <source-directory>

	详细的命令与选项可以这样找到

		latte -help

或者:

* 开启`REPL`, 然后构造一个`Compiler`

		compiler = Compiler()

	使用 `>>` 运算符来指定编译输出目录

		compiler >> '...'
		// or
		compiler >> File('...')

	使用 `+` 运算符来添加 class-path

		compiler + '...'

	使用 `compile MAP` 来确定源代码并立即开始编译

		compiler compile ['fileName':FileObject]

	通常来说会使用 `filesInDirectory('...', regex)`, e.g.

		compiler compile filesInDirectory('/Users/me/src', '.\*\\.lt'.r)

	这些方法调用可以被串联起来

		Compiler() + '...cp...' >> '...output...' compile filesInDirectory('...source...', '.\*\\.lt'.r)

	您可以编写一个脚本 `script` 来配置这些属性。查看 [build.lts.template](https://github.com/wkgcass/Latte-lang/blob/master/latte-compiler/src/main/resources/build.lts.template) 以获取更多信息。

# Scripts

* 你可以直接运行脚本

		latte -s script-file-path script-arguments...

或者:

*  开启 `REPL` 解释器  
	输入 `:script <script file>` 并回车

	然后使用 `script run` 或者 `script run ['string array']` 来运行这个脚本

# JSR 223

Latte-lang支持JSR223规范。使用`getEngineByName("Latte-lang")`来获取`ScriptEngine`。

```java
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Latte-lang");
Object result = engine.eval("a = 1 + 3");
System.out.println(engine.get("a"));
```

由于Latte-lang是一种编译型语言,并且它直接编译到JVM字节码,所以你甚至可以在Latte源代码中使用脚本引擎。

```
engine = ScriptEngineManager().getEngineByName("Latte-lang")
result = engine eval "a = 1 + 3"
.println result
.println engine.a
```

<h1 id='gradle-plugin-ch'>Gradle 插件</h1>

提供了一个`Gradle`的插件, 这个插件可以用来编译和运行`latte`源文件和脚本(script)。

### 如何使用

### step1

添加如下gradle plugin配置:

```groovy
buildscript {
    dependencies {
        classpath 'org.latte-lang:latte-gradle-plugin:$VERSION'
    }
}

apply plugin: 'latte'

sourceSets {
    main {
        java
        latte.srcDirs = ['src/main/latte']
        resources
    }
    test {
        java
        latte
        resources
    }
}

latteConfig {
    afterJava = true
    afterGroovy = false
    fastFail = false
}
```

> 所有的配置项都是可选的

插件添加了 `compileLatte` 和 `compileTestLatte` 任务。`compileLatte` 在 `classes` 任务之前, `compileTestLatte` 在 `testClasses` 任务之前

### step2
在同一个上级目录中创建名称为`latte`的目录。目录结构树应当为:

	src
	├── main
	│   ├── java
	│   │   └── \*.java    ; java source
	│   ├── latte
	│   │   └── \*.lt      ; latte source
	│   └── resources
	│       │── \*.lts     ; latte scripts
	│       └── other resources
	└── test
	    ├── java
	    │   └── \*.java
	    ├── latte
	    │   └── \*.lt
	    └── resources
	        ├── \*.lts
	        └── other resources

### step3
运行

	gradle clean jar

# 语法

您可以从这两个地方获取语法规则

[语法规则](https://github.com/wkgcass/Latte-lang/blob/master/mannual-zh.md)

[Latte 主页](http://latte-lang.org/)


================================================
FILE: TODO.md
================================================
# Latte-lang TODOs

## Modularization /2016-10-23

latte-compiler can be divided into 4 parts:

* latte-compiler-scanner-parser takes string input and produce AST
* latte-compiler-semantic takes AST and produce bytecode-like semantic objects
* latte-compiler-code-gen produce bytecode
* latte-compiler contains Latte lang, repl and other runtime necessary dependencies

## Value Available Assurance /2016-10-16

Some language support `null safety` (e.g. Kotlin). Latte would support a better value assurance. However, when calling a java method, there's no guarantee that the result would be safe. So Latte don't provide checking for methods outside, only checking inside the method.

When defining a method, let each param be `null safe` or `value available` or `no assurance` as default.

* ~~add new modifier for variables (`notnull`, `notempty`. The first only checks null/Unit, the second cast the value to bool can check the result).~~ / 2016-10-18 **DONE**
* ~~implement the modifiers for params and return values~~ / 2016-10-18 **DONE**
* ~~implement the modifiers for local variables~~ / 2016-10-22 **DONE**
* ~~implement the modifiers for fields~~ /2016-10-18 **REMOVED**

## Performance and Accuracy 1 /2016-10-15

There are multiple things can be refactored, especially the lambda expression.
First step would be these tasks:

* ~~`val` variable types can be predicted. (EASY)~~ / 2016-10-16 **DONE**
* ~~when generating lambda expression, non-accessible variables (those with an invalid name) can be ignored. (HARD)~~ / 2016-10-23 **DONE**
* scanner can be refactored. (HARD)
* ~~step 1 should be refactored. first retrieve all packages that's defined in source code, then check import. (MEDIUM)~~ / 2016-10-16 **DONE**
* ~~scan class path to see whether a package exist. (EASY)~~ / 2016-10-16 **DONE**

## Full Function Support /2016-10-14

The current `function type` support is not good enough. Any thing that is invokable should be seen as a function.

Here's the what to do:

* ~~remove inner method, replace with lambda (EASY)~~ /2016-10-16 **REMOVE** methods are methods, they divide from functions

  a method can be directly accessed without `(...)` to have it invoked, but a function is passed as a variable.
  they are not the same

* ~~use `fun` as modifier when defining methods (just like kotlin) (EASY)~~ /2016-10-16 **DONE** but instead of `fun`, we use `def`

  the functions shoud be considered differently from methods.  
  and now statements like `def m=1` can be used. `def m=1`,`def m:int=1`,`def m:int |- ...`,`def m:int`,`def m |- ...`,`def m`

* ~~constructor as a function, when calling the function, a new object would be returned (MEDIUM)~~ **REMOVE**
* ~~method as a function, when calling the function, the method would be invoked (MEDIUM)~~ **REMOVE**
* bind argument to function, which generates a new function (HARD)


================================================
FILE: build.py
================================================
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import time
from subprocess import Popen, PIPE
import zipfile
import platform
import getpass

GRADLE_CMD = 'gradle'
ACTION = 'build'
ALLOWED_ACTIONS = ['build', 'test', 'deploy']
BUILD_MODULES = ['latte-class-recorder', 'latte-compiler', 'latte-gradle-plugin', 'latte-library', 'latte-build']
DEPLOY_USER = ''
DEPLOY_PASS = ''

JAVA_MIN_VERSION = '1.6'
GRADLE_MIN_VERSION = '2.12'
PACK_ZIP_DIR = 'latte-build/build/distributions/'
VERSION_FILE = 'latte-build/src/main/resources/version'

def log(s):
    print s

def javaVersion():
    try:
        ps = Popen('java -version'.split(' '), stdout=PIPE, stderr=PIPE)
    except:
        return ''
    lines = ps.stderr.readlines()
    if len(lines) == 0:
        return ''
    ver = lines[0].strip()
    starter = 'java version \"'
    if ver[0:len(starter)] == starter:
        ver = ver[len(starter):-1]
        while '_' in ver:
            ver = ver[0:ver.find('_')]
        return ver
    else:
        return ''

def gradleVersion():
    try:
        ps = Popen((GRADLE_CMD + ' --version').split(' '), stdout=PIPE, stderr=PIPE)
    except:
        return ''
    lines = ps.stdout.readlines()
    if len(lines) < 3:
        return ''
    ver = lines[2].strip()
    starter = 'Gradle '
    if ver[0:len(starter)] == starter:
        ver = ver[len(starter):]
        return ver
    else:
        return ''

def compareVersionLt(a, b):
    aa = a.split('.')
    bb = b.split('.')
    i = 0
    while i < len(aa) and i < len(bb):
        ia = int(aa[i])
        ib = int(bb[i])
        i += 1
        if ia > ib:
            return False
        elif ia == ib:
            continue
        else:
            return True
    return False

def check():
    # check java version
    jVer = javaVersion()
    if jVer == '':
        log('Java not found')
        return False
    if compareVersionLt(jVer, JAVA_MIN_VERSION):
        log('Java version is %s, but %s or higher required' % (str(jVer), str(JAVA_MIN_VERSION)))
        return False

    # check gradle version
    gVer = gradleVersion()
    if gVer == '':
        log('Gradle not found [' + GRADLE_CMD + ']')
        return False
    if compareVersionLt(gVer, GRADLE_MIN_VERSION):
        log('Gradle version is %s, but %s or higher required' % (str(gVer), str(GRADLE_MIN_VERSION)))
        return False

    # get version
    versionFile = open(VERSION_FILE, 'r')
    version = versionFile.readline().strip()
    versionFile.close()
    log('--- current version is [%s] ---' % (version))

    return True

def execute(cmd):
    exportStr = 'export'
    env = {}
    env['BUILD_ACTION'] = ACTION.lower()
    if DEPLOY_USER and DEPLOY_PASS:
        env['DEPLOY_USER'] = DEPLOY_USER
        env['DEPLOY_PASS'] = DEPLOY_PASS
    s = ''
    for k in env:
        s += (exportStr + ' ' + k + '=' + env[k] + '\n')
    return 0 == os.system(s + cmd)

def buildModule(module):
    log('--- Start to build module [%s] ---' % (module))
    return execute('cd %s\n%s clean latteBuild' % (module, GRADLE_CMD))

def build():
    for m in BUILD_MODULES:
        if not buildModule(m):
            return False
    return True

def unixLink(script):
    # some file system do not support `ln`
    # so we create a new shell script
    # which redirect all input arguments to dest script
    f = open('latte', 'w')
    f.write('basepath=$(cd `dirname $0`; pwd)\n')
    f.write('$basepath/' + script + ' "$@"\n')
    f.close()
    # and chmox +x to both the scripts
    return \
    (0 == os.system('chmod +x latte')) and \
    (0 == os.system('chmod +x ' + script))

def scripts():
    # unzip the latte.jar
    zipF = None
    for f in os.listdir(PACK_ZIP_DIR):
        if f[-4:] == '.zip':
            zipF = f
            break
    if not zipF:
        log('distribution zip file not found')
        return False
    theFile = zipfile.ZipFile(PACK_ZIP_DIR + zipF, 'r')
    for filename in theFile.namelist():
        theFile.extract(filename, "./build/")

    # link the scripts
    script = 'build/' + zipF[0:-4] + '/bin/latte'

    if unixLink(script):
        return True
    else:
        log('Create shortcut script failed')
        return False

def performModule(module):
    log('--- Start to build module [%s] ---' % (module))
    return execute('cd %s\n%s clean latte%s' % (module, GRADLE_CMD, ACTION))

def perform():
    for m in BUILD_MODULES:
        if not performModule(m):
            return False
    return True

def start():
    if ACTION == 'Deploy':
        global DEPLOY_USER
        global DEPLOY_PASS
        DEPLOY_USER = raw_input('user: ')
        DEPLOY_PASS = getpass.getpass('pass: ')

    log('============================')
    log( ACTION + ' Start')
    log('============================')
    startTime = time.time()

    res = check() and perform()
    if ACTION == 'Build':
        scripts()

    endTime = time.time()
    if res:
        log('============================')
        log( ACTION + ' Successful')
        log('============================')
        log('Total time: %.3f secs' % (endTime - startTime))
    else:
        log('============================')
        log( ACTION + ' Failed')
        log('============================')

def assertNotLast(argv, i):
    if len(argv) > i + 1:
        return
    raise Exception('command not complete')

def extractArgs():
    if len(sys.argv) == 1:
        return {}

    global GRADLE_CMD
    global ACTION
    global BUILD_MODULES

    index = 1
    while index < len(sys.argv):
        cmd = sys.argv[index]
        if cmd == '--gradle' or cmd == '-g':
            assertNotLast(sys.argv, index)
            index = index + 1
            GRADLE_CMD = sys.argv[index]

        elif cmd == '--action' or cmd == '-a':
            assertNotLast(sys.argv, index)
            index = index + 1
            ACTION = sys.argv[index]

        elif cmd == '--modules' or cmd == '-m':
            assertNotLast(sys.argv, index)
            index = index + 1
            BUILD_MODULES = sys.argv[index].split(',')

        else:
            raise Exception('unknown arg [' + cmd + ']')
        index = index + 1

if __name__ == "__main__":
    if len(sys.argv) == 2 and ((sys.argv[1] == '-h') or (sys.argv[1] == '--help')):
        log('''./build.py [-g|--gradle gradle-command-name]
           [-a|--action %s]
           [-m|--modules module-name1,module-name2,...]''' % ('|'.join(ALLOWED_ACTIONS)))
        exit()
    try:
        extractArgs()
        if ACTION in ALLOWED_ACTIONS:
            ACTION = ACTION[0:1].upper() + ACTION[1:]
            start()
        else:
            log('Unknown action [' + ACTION + ']')
    except Exception, e:
        log(str(e))


================================================
FILE: latte-build/.gitignore
================================================
.gradle/*
.idea/*
build/*
*.ipr
*.iws
out/*


================================================
FILE: latte-build/build.gradle
================================================
def VERSION_FILE = file('src/main/resources/version')
BufferedReader br = new BufferedReader(new FileReader(VERSION_FILE))
def VERSION = br.readLine().trim()
br.close()

def ACTION = System.getenv("BUILD_ACTION")

group 'org.latte-lang'
version VERSION

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'application'
apply plugin: 'maven'
if ('deploy' == ACTION) {
    apply plugin: 'signing'
}
apply plugin: LatteBuild

mainClassName = 'lt.repl.Entry'
applicationName = 'latte'

sourceCompatibility = 1.6
targetCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

configurations {
    provided
}

sourceSets {
    main.compileClasspath += configurations.provided
    test.compileClasspath += configurations.provided
    test.runtimeClasspath += configurations.provided
}

repositories {
    mavenLocal()
    mavenCentral()
}

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

            def deploy_user = System.getenv('DEPLOY_USER')
            def deploy_pass = System.getenv('DEPLOY_PASS')

            repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
                authentication(userName: deploy_user, password: deploy_pass)
            }

            pom.project {
                name 'latte-build'
                packaging 'jar'
                description 'The project is to build the latte-lang modules into one, and provide command line support.'
                url 'http://latte-lang.org'
                scm {
                    url 'https://github.com/wkgcass/Latte-lang'
                    connection 'scm:git:https://github.com/wkgcass/Latte-lang.git'
                    developerConnection 'scm:git:https://github.com/wkgcass/Latte-lang.git'
                }
                licenses {
                    license {
                        name 'MIT LICENSE'
                        url 'https://github.com/wkgcass/Latte-lang/blob/master/LICENSE/'
                    }
                }
                developers {
                    developer {
                        id 'wkgcass'
                        email 'wkgcass@hotmail.com'
                    }
                }
            }
        }
    }
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from 'build/docs/javadoc'
}

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

artifacts {
    archives jar
    archives javadocJar
    archives sourcesJar
}

javadoc {
    options {
        encoding 'UTF-8'
        charSet 'UTF-8'
    }
}

if (null == ACTION) {
    jar {
        manifest {
            attributes("Manifest-Version": 1.0,
                       "Main-Class": "lt.repl.Entry")
        }
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
        into('assets') {
            from 'assets'
        }
    }
}

if ('deploy' == ACTION) {
    signing {
        sign configurations.archives
    }
}

dependencies {
    compile group: 'org.latte-lang', name: 'latte-compiler', version: VERSION
    compile group: 'org.latte-lang', name: 'latte-library', version: VERSION
    provided group: 'jline', name: 'jline', version: '2.14.5'
}

class LatteBuild implements Plugin<Project> {
    @Override
    void apply(Project project) {
        def latteBuild = project.task('latteBuild')
        latteBuild.dependsOn project.tasks['install']

        project.task('latteTest') // do nothing

        def latteDeploy = project.task('latteDeploy')
        latteDeploy.dependsOn project.tasks['uploadArchives']
    }
}


================================================
FILE: latte-build/settings.gradle
================================================
rootProject.name = 'latte-build'



================================================
FILE: latte-build/src/main/java/lt/repl/CtrlCHandler.java
================================================
package lt.repl;

/**
 * handle ctrl-c (INT) event
 */
public interface CtrlCHandler {
        interface ExitCallback {
                void exit();
        }

        void setExitCallback(ExitCallback exitCallback);

        void setAlert(Runnable alert);

        void handle();
}


================================================
FILE: latte-build/src/main/java/lt/repl/CtrlCHandlerImpl.java
================================================
package lt.repl;

import sun.misc.Signal;
import sun.misc.SignalHandler;

/**
 * handle ctrl-c (INT) event
 */
public class CtrlCHandlerImpl implements CtrlCHandler {
        private Runnable alert = null;
        private ExitCallback exitCallback = null;
        private final IO io;
        private int count;

        public CtrlCHandlerImpl(IO io) {
                this.io = io;
        }

        @Override
        public void setExitCallback(final ExitCallback exitCallback) {
                this.exitCallback = exitCallback;
        }

        @Override
        public void setAlert(Runnable alert) {
                this.alert = alert;
        }

        @Override
        public void handle() {
                ++count;
                if (count == 2) {
                        io.out.println();
                        exitCallback.exit();
                } else {
                        io.out.println("\n(To exit, press ^C again or type :q)");
                        if (alert != null) {
                                alert.run();
                        }
                        new Thread(new Runnable() {
                                @Override
                                public void run() {
                                        try {
                                                Thread.sleep(1000);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace(io.err);
                                        }
                                        count = 0;
                                }
                        }).start();
                }
        }
}


================================================
FILE: latte-build/src/main/java/lt/repl/Entry.java
================================================
package lt.repl;

import lt.compiler.SyntaxException;
import lt.repl.scripting.EvalEntry;
import lt.util.Utils;

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Entry {
        public static void main(String[] args) throws Exception {
                if (args == null || args.length > 0) {
                        runCommands(args);
                } else {
                        StringReader reader;
                        try {
                                Class.forName("jline.console.ConsoleReader"); // check exists
                                reader = (StringReader) Class.forName("lt.repl.JLineStringReader")
                                        .getConstructor().newInstance();
                        } catch (ClassNotFoundException ignore) {
                                reader = new SimpleStringReader();
                        }

                        REPL repl = new REPL(reader, new IO(System.in, System.out, System.err),
                                new CtrlCHandler.ExitCallback() {
                                        @Override
                                        public void exit() {
                                                System.exit(0);
                                        }
                                });
                        repl.handleCtrlC();
                        repl.start();
                }
        }

        /**
         * run the program with arguments
         *
         * @param args arguments
         */
        private static void runCommands(String[] args) throws Exception {
                String command = args[0];
                if (command.equals("help") || command.equals("-help") || command.equals("--help") || command.equals("-h") || command.equals("/h") || command.equals("/help")) {// help
                        System.out.println("" +
                                "usage: -s <script-location> [arguments [,...]]\n" +
                                "       -c <source-directory> [-r] [-o <output-directory>] [-cp <classpath[:...]>]\n" +
                                "       ClassName [-cp <classpath[:...]>]\n" +
                                "       -gb <project-directory>\n" +
                                "       -repl\n" +
                                "       -v | -version\n" +
                                "       -e <statements>\n" +
                                "\n" +
                                "-s       Specify the script location and run the script\n" +
                                "-c       Specify the source file directory and compile *.lt files\n" +
                                "-r       [option] Add sub directory files to compiling list.\n" +
                                "-o       [option] Specify the output directory. (the source-directory/target/classes/ as default)\n" +
                                "-cp      [option] The classpath. use ':' to separate the class-paths\n" +
                                "-repl    Start the repl (or run the program with 0 arguments)\n" +
                                "-gb      Generate build.lts and run.lts in the given directory\n" +
                                "-e       Evaluate the given statement and print the result\n" +
                                "-version Show current version\n");

                } else if (command.equals("-v") || command.equals("-version")) {
                        System.out.println("Latte-lang " + VersionRetriever.version());

                } else if (command.equals("-s")) {// run scripts
                        // -s ?
                        if (args.length < 2) {
                                System.err.println("invalid command -s. the script file location should be specified\n" +
                                        "see --help");
                                return;
                        }
                        String path = args[1];
                        File f = new File(path);
                        ScriptCompiler s = new ScriptCompiler(ClassLoader.getSystemClassLoader());
                        try {
                                ScriptCompiler.Script script = s.compile(f);
                                String[] scriptArgs = new String[args.length - 2];
                                System.arraycopy(args, 2, scriptArgs, 0, args.length - 2);
                                script.run(scriptArgs);
                        } catch (Throwable e) {
                                if (e instanceof SyntaxException) {
                                        System.err.println("[ERROR] " + e.getMessage());
                                } else {
                                        e.printStackTrace();
                                }
                        }

                } else if (command.equals("-c")) {// compile
                        // -c ?
                        if (args.length < 2) {
                                System.err.println("invalid command -c. the source directory should be specified\n" +
                                        "see --help");
                                return;
                        }
                        String sourceDir = args[1].trim();
                        if (sourceDir.endsWith(File.separator)) {
                                sourceDir = sourceDir.substring(0, sourceDir.length() - File.separator.length());
                        }

                        boolean recursive = false;
                        String outputDir = sourceDir + File.separator + "target" + File.separator + "classes";
                        List<URL> classPaths = new ArrayList<URL>();

                        for (int i = 2; i < args.length; ++i) {
                                String cmd = args[i];
                                if (cmd.equals("-r")) {
                                        recursive = true;

                                } else if (cmd.equals("-o")) {
                                        if (args.length - 1 == i) {
                                                System.err.println("invalid option -o. the output directory should be specified");
                                                System.err.println("see --help");
                                                return;
                                        }
                                        outputDir = args[++i];

                                } else if (cmd.equals("-cp")) {
                                        if (args.length - 1 == i) {
                                                System.err.println("invalid option -cp. the class-path should be specified");
                                                System.err.println("see --help");
                                                return;
                                        }
                                        String[] class_paths = args[++i].split(":");
                                        for (String class_path : class_paths) {
                                                try {
                                                        classPaths.add(new URL(new File(class_path).toURI().toString()));
                                                } catch (MalformedURLException e) {
                                                        System.err.println("[ERROR] " + e.getMessage());
                                                        return;
                                                }
                                        }


                                } else {
                                        System.err.println("unknown option " + cmd);
                                        System.err.println("see --help");
                                        return;
                                }
                        }

                        Compiler compiler = new Compiler();
                        File outputDirFile = new File(outputDir);
                        if (!outputDirFile.exists()) //noinspection ResultOfMethodCallIgnored
                                outputDirFile.mkdirs();
                        compiler.config.result.outputDir = outputDirFile;
                        compiler.config.classpath = classPaths;

                        try {
                                compiler.compile(Utils.filesInDirectory(sourceDir, ".*\\.(lt|latte)", recursive));
                        } catch (Exception e) {
                                if (e instanceof SyntaxException) {
                                        System.err.println("[ERROR] " + e.getMessage());
                                } else {
                                        e.printStackTrace();
                                }
                        }

                } else if (command.equals("-gb")) {
                        final List<String> theFilesToBeGenerated = Arrays.asList("build.lts", "run.lts");

                        if (args.length != 2) {
                                System.err.println("invalid command -gb.");
                                System.err.println("see --help");
                                return;
                        }
                        String projectDir = args[1].trim();
                        if (projectDir.endsWith(File.separator)) {
                                projectDir = projectDir.substring(0, projectDir.length() - File.separator.length());
                        }

                        String core = String.valueOf(Runtime.getRuntime().availableProcessors());
                        String separator = File.separator;

                        for (String theFile : theFilesToBeGenerated) {
                                String filePath = projectDir + File.separator + theFile;
                                File file = new File(filePath);
                                if (file.exists()) {
                                        System.out.println("[INFO] " + filePath + " exists");
                                } else {
                                        try {
                                                //noinspection ResultOfMethodCallIgnored
                                                file.createNewFile();
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        }
                                }

                                try {
                                        FileWriter fw = new FileWriter(file);
                                        BufferedReader br = new BufferedReader(new InputStreamReader(REPL.class.getClassLoader().getResourceAsStream(theFile + ".template")));

                                        String ss;
                                        while ((ss = br.readLine()) != null) {
                                                ss = ss.replace("${core}", core)
                                                        .replace("${dir}", projectDir.replace("\\", "\\\\"))
                                                        .replace("${separator}", separator) + "\n";
                                                fw.write(ss.toCharArray());
                                        }
                                        fw.flush();
                                        fw.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }

                } else if (command.equals("-repl")) {// repl
                        main(new String[0]);
                } else if (command.equals("-e")) {// eval
                        if (args.length == 1 || args[1] == null || args[1].trim().isEmpty()) {
                                System.err.println("missing statements to eval");
                                return;
                        }
                        String statements = args[1].trim();
                        Evaluator e = new Evaluator(new ClassPathLoader(Thread.currentThread().getContextClassLoader()));
                        EvalEntry entry = e.eval(statements);
                        System.out.println(entry.result);

                } else {// run
                        List<URL> urls = new ArrayList<URL>();
                        try {
                                String url = new File("").toURI().toString();
                                urls.add(new URL(url));
                        } catch (MalformedURLException e) {
                                System.err.println("[ERROR] " + e.getMessage());
                                return;
                        }
                        String[] runArgs = new String[0];
                        for (int i = 1; i < args.length; ++i) {
                                String cmd = args[i];
                                if (cmd.equals("-cp")) {
                                        if (i == args.length - 1) {
                                                System.err.println("invalid option -cp. the class-path should be specified");
                                                System.err.println("see --help");
                                                return;
                                        }
                                        String cps = args[++i];
                                        for (String cp : cps.split(":")) {
                                                try {
                                                        urls.add(new URL(new File(cp).toURI().toString()));
                                                } catch (MalformedURLException e) {
                                                        System.err.println("[ERROR] " + e.getMessage());
                                                        return;
                                                }
                                        }

                                } else if (cmd.equals("-args")) {
                                        runArgs = new String[args.length - 1 - i];
                                        System.arraycopy(args, i + 1, runArgs, 0, runArgs.length);
                                        break;
                                } else {
                                        System.err.println("unknown option " + cmd);
                                        System.err.println("see --help");
                                        return;
                                }
                        }

                        try {
                                // run the class
                                Run run = new Run(urls, command);
                                run.exec(runArgs);
                        } catch (Throwable t) {
                                t.printStackTrace();
                        }
                }
        }
}


================================================
FILE: latte-build/src/main/java/lt/repl/IO.java
================================================
package lt.repl;

import java.io.*;

public class IO {
        public final InputStream inStream;
        public final OutputStream outStream;
        public final OutputStream errStream;
        public final Reader in;
        public final PrintStream out;
        public final PrintStream err;

        public IO(InputStream in, OutputStream out, OutputStream err) {
                this.inStream = in;
                this.outStream = out;
                this.errStream = err;

                this.in = new InputStreamReader(in);
                this.out = new PrintStream(out, true);
                this.err = new PrintStream(err, true);
        }
}


================================================
FILE: latte-build/src/main/java/lt/repl/JLineStringReader.java
================================================
package lt.repl;

import jline.console.ConsoleReader;
import jline.console.UserInterruptException;

import java.io.IOException;

/**
 * read line from jLine
 */
public class JLineStringReader implements StringReader {
        private ConsoleReader reader;
        private IO io;
        private CtrlCHandler handler = null;

        public JLineStringReader() {
        }

        @Override
        public void setIO(IO io) {
                this.io = io;
                io.out.println("using jline.console.ConsoleReader to read input");
        }

        @Override
        public void setCtrlCHandler(CtrlCHandler handler) {
                this.handler = handler;
        }

        private void initReader() throws IOException {
                if (reader != null) {
                        reader.close();
                }
                reader = new ConsoleReader(io.inStream, io.outStream);
                reader.setHandleUserInterrupt(true);
        }

        @Override
        public String read() throws Exception {
                if (reader == null) {
                        initReader();
                }

                String line;
                while (true) {
                        try {
                                line = reader.readLine();
                                break;
                        } catch (UserInterruptException ignore) {
                                if (handler != null) {
                                        handler.handle();
                                }
                        }
                }
                if (line == null) return null;
                return line + '\n';
        }
}


================================================
FILE: latte-build/src/main/java/lt/repl/REPL.java
================================================
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2016 KuiGang Wang
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package lt.repl;

import lt.compiler.SyntaxException;
import lt.repl.scripting.Config;
import lt.repl.scripting.EvalEntry;

import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL;

/**
 * repl
 */
public class REPL {
        private final String lineStarter = "lt> ";
        private final String multipleLine = "  | ";
        private StringBuilder replSourceRec = new StringBuilder();
        private final IO io;
        private final CtrlCHandler.ExitCallback exitCallback;
        private StringReader reader;

        public REPL(StringReader reader, IO io, CtrlCHandler.ExitCallback exitCallback) {
                this.reader = reader;
                this.io = io;
                this.exitCallback = exitCallback;
        }

        public void start() throws Exception {
                io.out.println("Welcome to Latte lang");
                io.out.println("Type in expressions and double Enter to have them evaluated.");
                io.out.println("Type :help for more information.");
                io.out.println("for syntax help, please visit https://github.com/wkgcass/Latte-lang/");
                io.out.println();

                ClassPathLoader classPathLoader = new ClassPathLoader(Thread.currentThread().getContextClassLoader());

                Evaluator evaluator = new Evaluator(classPathLoader);
                reader.setIO(io);
                io.out.println();
                io.out.print(lineStarter);

                StringBuilder strBuilder = new StringBuilder();
                out:
                while (true) {
                        while (true) {
                                String s = reader.read();
                                if (s == null) {
                                        // the reader reached EOF
                                        break out;
                                }
                                if (s.endsWith("\n") || s.endsWith("\r")) {
                                        if (s.endsWith("\r\n")) {
                                                strBuilder.append(s.subSequence(0, s.length() - 2));
                                        } else {
                                                strBuilder.append(s.subSequence(0, s.length() - 1));
                                        }
                                        break;
                                }
                                strBuilder.append(s);
                        }
                        String str = strBuilder.toString();
                        strBuilder.delete(0, strBuilder.length());
                        if (str.trim().startsWith(":")) {
                                String cmd = str.trim();
                                // some functions that controls the REPL
                                if (cmd.equals(":help")) {
                                        io.out.println(":q                                         exit the REPL");
                                        io.out.println(":reset                                     reset the repl to its initial state, forgetting all session entries");
                                        io.out.println(":restart                                   restart the repl environment, drop all loaded jars");
                                        io.out.println(":                                          set current input to empty string");
                                        io.out.println(":cp <class-path>                           load classes");
                                        io.out.println(":script <script-path>                      compile a script");
                                        io.out.println("----------------------------------------------------------------");
                                        io.out.println(":scanner-indent                            use IndentScanner to scan input");
                                        io.out.println(":scanner-brace                             use BraceScanner to scan input");
                                        io.out.println("----------------------------------------------------------------");
                                        io.out.println("Compiler()                                 construct a new Compiler");
                                        io.out.println("compiler >> '<directory>'                  set compiler output directory");
                                        io.out.println("compiler compile filesInDirectory('<directory>')");
                                        io.out.println("                                           start compiling and generate class files");
                                        io.out.println("----------------------------------------------------------------");
                                        io.out.println("ScriptCompiler()                           construct a new ScriptCompiler");
                                        io.out.println("scriptCompiler << File('')                 add source code file");
                                        io.out.println("scriptCompiler compile File('script')      compile the script");
                                } else if (cmd.equals(":q")) {
                                        break;
                                } else if (cmd.equals(":reset")) {
                                        replSourceRec.delete(0, replSourceRec.length());
                                        evaluator = new Evaluator(classPathLoader);
                                } else if (cmd.equals(":restart")) {
                                        replSourceRec.delete(0, replSourceRec.length());
                                        classPathLoader = new ClassPathLoader(Thread.currentThread().getContextClassLoader());
                                        evaluator = new Evaluator(classPathLoader);
                                } else if (cmd.startsWith(":cp ")) {
                                        String cp = cmd.substring(":cp ".length()).trim();
                                        try {
                                                URL url = new URL(new File(cp).toURI().toString());
                                                classPathLoader.load(url);
                                        } catch (Throwable t) {
                                                t.printStackTrace(io.err);
                                                sleep(10);
                                        }
                                } else if (cmd.startsWith(":script ")) {
                                        String run = cmd.substring(":script ".length()).trim();
                                        try {
                                                ScriptCompiler scriptCompiler = new ScriptCompiler(classPathLoader);
                                                ScriptCompiler.Script script = scriptCompiler.compile(new File(run));
                                                evaluator.put("script", script);
                                                io.out.println("script : " + script.getClass().getName() + " = " + script);
                                        } catch (Throwable t) {
                                                t.printStackTrace(io.err);
                                                sleep(10);
                                        }
                                } else if (cmd.equals(":scanner-indent")) {
                                        evaluator.setScannerType(Config.SCANNER_TYPE_INDENT);
                                } else if (cmd.equals(":scanner-brace")) {
                                        evaluator.setScannerType(Config.SCANNER_TYPE_BRACE);
                                } else if (cmd.equals(":")) {
                                        replSourceRec.delete(0, replSourceRec.length());
                                } else {
                                        io.err.println("unknown command " + cmd + ", Type :help for more more information");
                                        sleep(10);
                                }
                                io.out.print("\n" + lineStarter);
                        } else {
                                if (str.trim().isEmpty()) {
                                        if (replSourceRec.length() != 0) {
                                                // do repl
                                                String stmt = replSourceRec.toString();
                                                try {
                                                        EvalEntry entry = evaluator.eval(stmt);
                                                        String name = entry.name;
                                                        Object o = entry.result;
                                                        if (name == null) {
                                                                showObjectStructure(o);
                                                        } else {
                                                                io.out.println(name + " : " + entry.type.getName().replaceAll("\\.", "::") + " = " + o);
                                                        }
                                                        io.out.print("\n" + lineStarter);
                                                } catch (Throwable t) {
                                                        if (t instanceof InvocationTargetException) {
                                                                t.getCause().printStackTrace(io.err);
                                                        } else if (t instanceof SyntaxException) {
                                                                int line = ((SyntaxException) t).lineCol.line - 1;
                                                                int col = ((SyntaxException) t).lineCol.column - 1;

                                                                if (line < 0) {
                                                                        io.err.println(t.getMessage());
                                                                } else {

                                                                        String[] strs = stmt.split("\\n|\\r");
                                                                        String s = strs[line];
                                                                        io.err.println(s);
                                                                        for (int i = 0; i < col; ++i) {
                                                                                io.err.print(" ");
                                                                        }
                                                                        io.err.print("^ ");
                                                                        io.err.println(t.getMessage());
                                                                }
                                                        } else {
                                                                t.printStackTrace(io.err);
                                                        }
                                                        sleep(10);
                                                        io.out.print(lineStarter);
                                                }
                                                replSourceRec.delete(0, replSourceRec.length());
                                        } else {
                                                io.out.print(lineStarter);
                                        }
                                } else {
                                        replSourceRec.append(str).append("\n");
                                        io.out.print(multipleLine);
                                }
                        }

                }
                exitCallback.exit();
        }

        private void showObjectStructure(Object o) throws IllegalAccessException {
                Class<?> cls = o.getClass();
                String className = cls.getName();
                io.out.println("class " + className);
                for (Field f : cls.getDeclaredFields()) {
                        f.setAccessible(true);
                        Object value = f.get(o);
                        io.out.println("    " + f.getName() + " : " + f.getType().getName().replaceAll("\\.", "::") + " = " + value);
                }
                for (Method m : cls.getDeclaredMethods()) {
                        io.out.print("    " + m.getName() + "(");
                        boolean isFirst = true;
                        for (Class<?> paramT : m.getParameterTypes()) {
                                if (isFirst) {
                                        isFirst = false;
                                } else {
                                        io.out.print(", ");
                                }
                                io.out.print(paramT);
                        }
                        io.out.println(") : " + m.getReturnType().getName().replaceAll("\\.", "::"));
                }
        }

        private void sleep(long millis) {
                try {
                        Thread.sleep(millis);
                } catch (InterruptedException e) {
                        e.printStackTrace(io.err);
                }
        }

        public void handleCtrlC() {
                // listen ctrl-c
                CtrlCHandler ctrlCHandler = new CtrlCHandlerImpl(io);
                ctrlCHandler.setExitCallback(exitCallback);
                ctrlCHandler.setAlert(new Runnable() {
                        @Override
                        public void run() {
                                io.out.print(lineStarter);
                                replSourceRec.delete(0, replSourceRec.length());
                        }
                });
                reader.setCtrlCHandler(ctrlCHandler);
        }
}


================================================
FILE: latte-build/src/main/java/lt/repl/SimpleStringReader.java
================================================
package lt.repl;

import sun.misc.Signal;
import sun.misc.SignalHandler;

/**
 * scanner line reader
 */
public class SimpleStringReader implements StringReader {
        private IO io;

        public SimpleStringReader() {
        }

        @Override
        public void setIO(IO io) {
                this.io = io;
                io.out.println("using java.util.Scanner to read input");
        }

        @Override
        public void setCtrlCHandler(final CtrlCHandler ctrlCSignalHandler) {
                SignalHandler handler = new SignalHandler() {
                        @Override
                        public void handle(Signal signal) {
                                if (!signal.getName().equals("INT")) {
                                        return;
                                }
                                ctrlCSignalHandler.handle();
                        }
                };
                Signal.handle(new Signal("INT"), handler);
        }

        @Override
        public String read() throws Exception {
                int b = io.in.read();
                if (b <= 0) {
                        return null;
                }
                return String.valueOf((char) b);
        }
}


================================================
FILE: latte-build/src/main/java/lt/repl/StringReader.java
================================================
package lt.repl;

/**
 * reads a line
 */
public interface StringReader {
        void setIO(IO io);

        void setCtrlCHandler(CtrlCHandler handler);

        String read() throws Exception;
}


================================================
FILE: latte-build/src/main/java/lt/repl/VersionRetriever.java
================================================
package lt.repl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * retrieves the version
 */
class VersionRetriever {
        static String version() throws IOException {
                InputStream is = VersionRetriever.class.getClassLoader().getResourceAsStream("version");
                InputStreamReader reader = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(reader);
                String ver = br.readLine();
                if (ver == null) return "UNKNOWN";
                return ver.trim();
        }
}


================================================
FILE: latte-build/src/main/resources/version
================================================
0.0.11-ALPHA
0.0.10-ALPHA
0.0.9.1-ALPHA
0.0.9-ALPHA
0.0.8-ALPHA
0.0.7-ALPHA


================================================
FILE: latte-class-recorder/.gitignore
================================================
.idea/*
.gradle/*
build/*


================================================
FILE: latte-class-recorder/build.gradle
================================================
def VERSION_FILE = file('../latte-build/src/main/resources/version')
BufferedReader br = new BufferedReader(new FileReader(VERSION_FILE))
def VERSION = br.readLine().trim()
br.close()

group 'org.latte-lang'
version VERSION

apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: LatteBuild

compileGroovy {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
    options.encoding = "UTF-8"
}

repositories {
    mavenLocal()
}

dependencies {
    compile localGroovy()
    compile gradleApi()
}

uploadArchives {
    repositories {
        mavenDeployer {
            mavenLocal()
        }
    }
}

class LatteBuild implements Plugin<Project> {
    @Override
    void apply(Project project) {
        def latteBuild = project.task('latteBuild')
        latteBuild.dependsOn project.tasks['install']

        project.task('latteTest') // do nothing

        project.task('latteDeploy') // do nothing
    }
}


================================================
FILE: latte-class-recorder/settings.gradle
================================================
rootProject.name = 'latte-class-recorder'



================================================
FILE: latte-class-recorder/src/main/groovy/org/lattelang/ClassRecorder.groovy
================================================
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2016 KuiGang Wang
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package org.lattelang

import org.gradle.api.Plugin
import org.gradle.api.Project

class ClassRecorderPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        def ext = project.extensions.create('recordConfig', ClassRecorderExtension)
        def task = project.task('recordClass').doLast { t ->
            def path = project.buildDir.absolutePath
            ClassRecorder.apply(path + '/' + ext.directory, ext.file)
        }

        task.dependsOn project.tasks['classes']
        project.tasks['jar'].dependsOn task
    }
}

class ClassRecorderExtension {
    String directory
    String file
}

class ClassRecorder {
    /**
     * scan the directory (including its child directories) and record all class files
     * and write into the output file
     *
     * @param scanPath the directory to scan
     * @param outputFile the output file
     * @throws Exception exception
     */
    private static void doScanPath(String scanPath, String outputFile) throws Exception {
        StringBuilder sb = new StringBuilder();
        File scanPathFile = new File(scanPath);
        if (!scanPathFile.exists()) return;
        scanPathRecursive(scanPathFile, sb, scanPath.length() + 1);
        File f = new File(outputFile);
        if (!f.exists()) {
            if (!f.createNewFile()) throw new IOException("cannot create file " + outputFile);
        }
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(sb.toString().getBytes());
    }

    /**
     * scan path recursively
     *
     * @param dir directory
     * @param sb string builder
     * @param l the base length
     */
    private static void scanPathRecursive(File dir, final StringBuilder sb, final int l) {
        File[] files = dir.listFiles();
        if (files == null) return;
        for (File f : files) {
            if (f.isDirectory()) {
                scanPathRecursive(f, sb, l);
            } else if (f.getName().endsWith(".class")) {
                sb.append(f.getAbsolutePath().substring(l)).append("\n");
            }
        }
    }

    /**
     * the main method called by maven
     *
     * @param outputDir the compile output (`classes` directory)
     * @param fileName the fileName of the text file that records the class names
     * @throws Exception exception
     */
    public static void apply(String outputDir, String fileName) throws Exception {
        String scanResult = outputDir + "/" + fileName;

        doScanPath(outputDir, scanResult);
    }
}


================================================
FILE: latte-class-recorder/src/main/resources/META-INF/gradle-plugins/org.latte-lang.class-recorder.properties
================================================
implementation-class=org.lattelang.ClassRecorderPlugin

================================================
FILE: latte-compiler/.gitignore
================================================
.idea/*
.gradle/*
build/*
*.ipr
*.iws
out/*


================================================
FILE: latte-compiler/build.gradle
================================================
def VERSION_FILE = file('../latte-build/src/main/resources/version')
BufferedReader br = new BufferedReader(new FileReader(VERSION_FILE))
def VERSION = br.readLine().trim()
br.close()

def ACTION = System.getenv("BUILD_ACTION")

group 'org.latte-lang'
version VERSION

buildscript {
    def VERSION_FILE_ = file('../latte-build/src/main/resources/version')
    BufferedReader br_ = new BufferedReader(new FileReader(VERSION_FILE_))
    def VERSION_ = br_.readLine().trim()
    br_.close()

    repositories {
        mavenLocal()
    }
    dependencies {
        classpath 'org.latte-lang:latte-class-recorder:' + VERSION_
    }
}

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'org.latte-lang.class-recorder'
apply plugin: 'maven'
if ('deploy' == ACTION) {
    apply plugin: 'signing'
}
apply plugin: LatteBuild

recordConfig {
    directory = 'classes/main'
    file = 'classes.txt'
}

sourceCompatibility = 1.6
targetCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

test {
    useJUnit()
    exclude 'lt/**'
}

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

            def deploy_user = System.getenv('DEPLOY_USER')
            def deploy_pass = System.getenv('DEPLOY_PASS')

            repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
                authentication(userName: deploy_user, password: deploy_pass)
            }

            pom.project {
                name 'latte-compiler'
                packaging 'jar'
                description 'The latte-lang compiler project, which contains compiler and runtime required library.'
                url 'http://latte-lang.org'
                scm {
                    url 'https://github.com/wkgcass/Latte-lang'
                    connection 'scm:git:https://github.com/wkgcass/Latte-lang.git'
                    developerConnection 'scm:git:https://github.com/wkgcass/Latte-lang.git'
                }
                licenses {
                    license {
                        name 'MIT LICENSE'
                        url 'https://github.com/wkgcass/Latte-lang/blob/master/LICENSE/'
                    }
                }
                developers {
                    developer {
                        id 'wkgcass'
                        email 'wkgcass@hotmail.com'
                    }
                }
            }
        }
    }
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from 'build/docs/javadoc'
}

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

artifacts {
    archives jar
    archives javadocJar
    archives sourcesJar
}

javadoc {
    options {
        encoding 'UTF-8'
        charSet 'UTF-8'
        exclude 'lt/dependencies/*'
    }
}

if ('deploy' == ACTION) {
    signing {
        sign configurations.archives
    }
}

class LatteBuild implements Plugin<Project> {
    @Override
    void apply(Project project) {
        def latteBuild = project.task('latteBuild')
        project.tasks['install'].dependsOn project.tasks['test']
        latteBuild.dependsOn project.tasks['install']

        def latteTest = project.task('latteTest')
        latteTest.dependsOn project.tasks['test']

        def latteDeploy = project.task('latteDeploy')
        latteDeploy.dependsOn project.tasks['uploadArchives']
    }
}


================================================
FILE: latte-compiler/settings.gradle
================================================
rootProject.name = 'latte-compiler'


================================================
FILE: latte-compiler/src/main/java/lt/compiler/AbstractScanner.java
================================================
package lt.compiler;

import lt.compiler.lexical.*;
import lt.compiler.syntactic.UnknownTokenException;

import java.io.IOException;
import java.io.Reader;
import java.util.*;

/**
 * the base scanner.
 */
public abstract class AbstractScanner implements Scanner {
        /**
         * the scanner creates a new <b>Layer</b> when meets these strings<br>
         * e.g.<br>
         * <pre>
         * lambda = ()-&gt; a+b
         * </pre>
         * would be considered as the following token tree<br>
         * <pre>
         * [lambda]-[=]-[(]-[)]-[-&gt;]-[|]-[END]
         *                            |
         *                            +-[a]-[+]-[b]
         * </pre>
         */
        public final Set<String> LAYER = new HashSet<String>(Arrays.asList("->", "=>"));
        /**
         * the input should be split when meets these tokens
         */
        public final Set<String> SPLIT_X = new HashSet<String>(Arrays.asList(
                ".", // class positioning or method access
                ":", // type specification or generic extends
                "::", // package::package
                "=", // assignment
                "^^", // pow
                "!", "&&", "||", // logic
                "!=", "==", "!==", "===", // equals/reference equals
                "<", ">", "<=", ">=", // comparison or generic extends/super
                "+", "-", "*", "/", "%", // operators
                "++", "--",
                "@", // @Annotation
                "...", // pass
                ":::", // concat
                ":=", // assign
                "#", // generator
                "<-" // pattern matching destructing
        ));
        public final Set<String> SPLIT_TWO_VAR_OP_THAT_CAN_BE_USED_WITH_ASSIGN = new HashSet<String>(Arrays.asList(
                "+", "-", "*", "/", "%",
                "<<", ">>", ">>>", // shift
                "&", "^", "|", "~" // bit logic
        ));
        /**
         * symbols that let the scanner know the following input should be scanned as a string<br>
         * a string starts with one of these symbols and ends with the same symbol.
         */
        public final Set<String> STRING = new HashSet<String>(Arrays.asList("\"", "'", "`"));
        /**
         * the escape character.
         */
        public static String ESCAPE = "\\";
        /**
         * these tokens split the input, but them themselves won't be recorded into the token tree. e.g.<br>
         * <pre>
         * list add 1
         * </pre>
         * the spaces split the input, but they won't be recorded.
         */
        public final Set<String> NO_RECORD = new HashSet<String>(Collections.singletonList(" "));
        /**
         * the str is considered as ending text. Append an EndingNode to the token tree
         */
        public static Set<String> ENDING = new HashSet<String>(Arrays.asList(",", ";"));
        /**
         * comment, strings after the token are ignored
         */
        public static String COMMENT = "//";
        /**
         * multiple line comment start symbol
         */
        public static String MultipleLineCommentStart = "/*";
        /**
         * multiple line comment end symbol
         */
        public static String MultipleLineCommentEnd = "*/";
        /**
         * the scanner creates a new layer when meets a <tt>key</tt> and the layer finishes at corresponding <tt>value</tt><br>
         * <pre>
         * map = {'name':'cass'}
         * </pre>
         * would be considered as the following token tree<br>
         * <pre>
         * [map]-[=]-[{]-[|]-[}]-[END]
         *                |
         *                --['name']-[:]-['cass']
         * </pre>
         */
        public final Map<String, String> PAIR = new HashMap<String, String>();
        /**
         * the input should be split when meets these tokens
         */
        public final List<String> SPLIT;

        {
                PAIR.put("(", ")"); // arguments/procedures/expressions
                PAIR.put("{", "}"); // map
                PAIR.put("[", "]"); // array[index]
                PAIR.put("<:", ":>"); // generic

                SPLIT_X.addAll(NO_RECORD);
                SPLIT_X.addAll(SPLIT_TWO_VAR_OP_THAT_CAN_BE_USED_WITH_ASSIGN);
                for (String s : SPLIT_TWO_VAR_OP_THAT_CAN_BE_USED_WITH_ASSIGN) {
                        SPLIT_X.add(s + "=");
                }

                Set<String> set = new HashSet<String>();
                set.addAll(LAYER);
                set.addAll(SPLIT_X);
                set.addAll(ENDING);
                set.add(COMMENT);
                set.add(MultipleLineCommentStart);
                set.add(MultipleLineCommentEnd);
                set.addAll(PAIR.keySet());
                set.addAll(PAIR.values());

                // the longest string is considered first
                SPLIT = new ArrayList<String>(set);
                Collections.sort(SPLIT, new Comparator<String>() {
                        @Override
                        public int compare(String a, String b) {
                                return b.length() - a.length();
                        }
                });
                SPLIT.addAll(0, STRING);
        }

        protected final String fileName;
        protected final PushLineBackReader reader;
        protected final Properties properties;
        protected final ErrorManager err;

        /**
         * initiate the processor with a reader
         *
         * @param fileName   the input text file name
         * @param reader     text reader
         * @param properties properties for the Scanner
         * @param err        error manager
         */
        public AbstractScanner(String fileName, Reader reader, Properties properties, ErrorManager err) {
                this.fileName = fileName;
                this.properties = properties;
                this.err = err;
                if (reader instanceof PushLineBackReader) {
                        this.reader = (PushLineBackReader) reader;
                } else {
                        this.reader = new PushLineBackReader(reader);
                }
        }

        /**
         * scan the text and generate a token tree.
         *
         * @return start node
         * @throws IOException     exception when reading the text
         * @throws SyntaxException exception when meets a syntax error
         */
        @Override
        public ElementStartNode scan() throws IOException, SyntaxException {
                Args args = new Args();
                args.fileName = fileName;
                ElementStartNode elementStartNode = new ElementStartNode(args, new Indent(0));
                args.startNodeStack.push(elementStartNode);
                args.currentLine = properties._LINE_BASE_;
                scan(args);
                finalCheck(elementStartNode);
                return elementStartNode;
        }

        protected abstract void scan(Args args) throws IOException, SyntaxException;

        /**
         * remove useless EndingNode and useless StartNode <br>
         * join double literal<br>
         * remove `` from the valid names
         *
         * @param root root node
         * @throws UnknownTokenException the token is unknown
         */
        protected void finalCheck(ElementStartNode root) throws UnknownTokenException {
                if (root.hasLinkedNode()) {
                        Node n = root.getLinkedNode();
                        while (n != null) {
                                if (n instanceof ElementStartNode) {
                                        finalCheck((ElementStartNode) n);
                                }
                                if (n instanceof EndingNode && (!n.hasNext() || !(n.next() instanceof Element))) {
                                        if (n.hasPrevious()) {
                                                n.previous().setNext(n.next());
                                        }
                                        if (n.hasNext()) {
                                                n.next().setPrevious(n.previous());
                                        }
                                } else if (n instanceof Element) {
                                        ((Element) n).checkWhetherIsValidName();
                                        if (((Element) n).getContent().equals(".")
                                                && n.hasPrevious()
                                                && n.hasNext()
                                                && n.previous() instanceof Element
                                                && n.next() instanceof Element
                                                && CompileUtil.isNumber(((Element) n.previous()).getContent())
                                                && CompileUtil.isNumber(((Element) n.next()).getContent())
                                                && !((Element) n.previous()).getContent().contains(".")
                                                && !((Element) n.next()).getContent().contains(".")) {
                                                Element pre = (Element) n.previous();
                                                Element ne = (Element) n.next();
                                                String s = pre.getContent() + "." + ne.getContent();
                                                Element element = new Element(new Args(), s, getTokenType(s, pre.getLineCol()));
                                                element.setLineCol(pre.getLineCol());

                                                element.setPrevious(pre.previous());
                                                element.setNext(ne.next());

                                                element.getLineCol().length = s.length();

                                                if (element.hasPrevious()) {
                                                        element.previous().setNext(element);
                                                } else {
                                                        root.setLinkedNode(element);
                                                }
                                                if (element.hasNext()) {
                                                        element.next().setPrevious(element);
                                                }
                                        }
                                }

                                n = n.next();
                        }
                        n = root.getLinkedNode();
                        while (n != null) {
                                if (n instanceof ElementStartNode && n.hasNext() && !(n.next() instanceof EndingNode)) {
                                        Node next = n.next();

                                        Args args = new Args();
                                        args.previous = n;
                                        args.currentLine = n.getLineCol().line;
                                        args.currentCol = n.getLineCol().column;
                                        EndingNode endingNode = new EndingNode(args, EndingNode.SYNTHETIC);

                                        endingNode.setNext(next);
                                        next.setPrevious(endingNode);
                                }
                                n = n.next();
                        }
                } else {
                        if (root.hasPrevious()) {
                                root.previous().setNext(root.next());
                        }
                        if (root.hasNext()) {
                                root.next().setPrevious(root.previous());
                        }
                }
        }

        /**
         * @param str     the token to check type
         * @param lineCol line column file
         * @return TokenType or null if it's an unknown token
         * @throws UnknownTokenException exception
         */
        protected final TokenType getTokenType(String str, LineCol lineCol) throws UnknownTokenException {
                if (CompileUtil.isBoolean(str)) return TokenType.BOOL;
                if (CompileUtil.isModifier(str)) return TokenType.MODIFIER;
                if (CompileUtil.isNumber(str)) return TokenType.NUMBER;
                if (CompileUtil.isString(str)) return TokenType.STRING;
                if (CompileUtil.isKey(str))
                        return TokenType.KEY; // however in/is/not are two variable operators, they are marked as keys
                if (CompileUtil.isSymbol(str)) return TokenType.SYMBOL;
                if (SPLIT.contains(str)) return TokenType.SYMBOL;
                if (CompileUtil.isValidName(str)) return TokenType.VALID_NAME;
                err.UnknownTokenException(str, lineCol);
                // ignore the token, and return null
                return null;
        }

        /**
         * create an {@link ElementStartNode}
         *
         * @param args        args context
         * @param indentation indentation of the new element start node
         */
        protected final void createStartNode(Args args, int indentation) {
                ElementStartNode elementStartNode = new ElementStartNode(args, new Indent(indentation));
                args.previous = null;
                args.startNodeStack.push(elementStartNode);
        }

        /**
         * check whether it's the string end. count the `\`, check whether it%2==0
         *
         * @param line  the line
         * @param index index of `\`
         * @return true/false
         */
        protected final boolean checkStringEnd(String line, int index) {
                int count = 0;
                char[] arr = line.toCharArray();
                for (int i = index; i > 0; --i) {
                        char c = arr[i];
                        if (c == '\\') ++count;
                        else break;
                }
                return count % 2 == 0;
        }

        /**
         * pop one or more nodes from {@link Args#startNodeStack}, the last popped node's indentation should be the same as required indent
         *
         * @param args   args context
         * @param indent required indentation
         * @throws UnexpectedTokenException compiling error
         */
        protected final void redirectToPairStart(Args args, Indent indent) throws SyntaxException {
                if (args.startNodeStack.empty()) {
                        err.SyntaxException("possibly incorrect indentation or mismatched brackets", args.generateLineCol());
                        return;
                }

                ElementStartNode startNode = args.startNodeStack.pop();

                // use `==`, compare the reference
                if (startNode.getIndent() == indent) {
                        if (startNode.hasNext()) {
                                throw new LtBug("startNode in this step should never have nodes appended");
                        }
                        // do redirect
                        args.previous = startNode;
                } else {
                        if ((startNode.getIndent().getIndent() != Indent.FLEX && startNode.getIndent().getIndent() < indent.getIndent())
                                || args.startNodeStack.empty()) {
                                err.SyntaxException("possibly incorrect indentation or mismatched brackets", args.generateLineCol());
                                return;
                        }
                        redirectToPairStart(args, indent);
                }
        }

        protected final void redirectToDeeperStartNodeByIndent(Args args, int indent, boolean newLine) throws SyntaxException {
                if (args.startNodeStack.empty()) {
                        throw new LtBug("this should never happen");
                }

                ElementStartNode requiredNode = args.startNodeStack.pop();
                if (args.startNodeStack.empty()) {
                        throw new LtBug("this should never happen");
                }
                ElementStartNode startNode = args.startNodeStack.lastElement();

                if (startNode.getIndent().getIndent() == indent) {
                        if (startNode.hasNext()) {
                                throw new LtBug("startNode in this step should never have nodes appended");
                        }
                        // do redirect
                        args.previous = requiredNode;
                        if (newLine) {
                                args.previous = new EndingNode(args, EndingNode.WEAK);
                        }
                } else {
                        if ((startNode.getIndent().getIndent() != Indent.FLEX && startNode.getIndent().getIndent() < indent)
                                || args.startNodeStack.empty()) {
                                err.SyntaxException("possibly incorrect indentation or mismatched brackets", args.generateLineCol());
                                return;
                        }
                        redirectToDeeperStartNodeByIndent(args, indent, newLine);
                }
        }
}


================================================
FILE: latte-compiler/src/main/java/lt/compiler/BraceScanner.java
================================================
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2016 KuiGang Wang
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package lt.compiler;

import lt.compiler.lexical.*;
import lt.compiler.syntactic.UnknownTokenException;

import java.io.IOException;
import java.io.Reader;
import java.util.*;

/**
 * scan text which is formed up by braces.<br>
 */
public class BraceScanner extends AbstractScanner {
        /**
         * initiate the processor with a reader
         *
         * @param fileName   the input text file name
         * @param reader     text reader
         * @param properties properties for the Scanner
         * @param err        error manager
         */
        public BraceScanner(String fileName, Reader reader, Properties properties, ErrorManager err) {
                super(fileName, reader, properties, err);

                init();
        }

        private void init() {
                SPLIT_X.addAll(LAYER);
                LAYER.clear();

                Set<String> set = new HashSet<String>();
                set.addAll(LAYER);
                set.addAll(SPLIT_X);
                set.addAll(ENDING);
                set.add(COMMENT);
                set.add(MultipleLineCommentStart);
                set.add(MultipleLineCommentEnd);
                set.addAll(PAIR.keySet());
                set.addAll(PAIR.values());

                SPLIT.clear();
                // the longest string is considered first
                List<String> tmpList = new ArrayList<String>(set);
                Collections.sort(tmpList, new Comparator<String>() {
                        @Override
                        public int compare(String a, String b) {
                                return b.length() - a.length();
                        }
                });
                SPLIT.addAll(tmpList);
                SPLIT.addAll(0, STRING);
        }

        @Override
        public ElementStartNode scan() throws IOException, SyntaxException {
                ElementStartNode root = super.scan();
                finalCheck(root);
                return root;
        }

        @Override
        protected void scan(Args args) throws IOException, SyntaxException {
                String line = reader.readLine();
                while (line != null) {
                        ++args.currentLine;

                        err.putLineRecord(args.fileName, args.currentLine, line);

                        args.currentCol = properties._COLUMN_BASE_;
                        args.useDefine.clear();

                        if (args.multipleLineComment) {
                                if (!line.contains(MultipleLineCommentEnd)) {
                                        line = reader.readLine();
                                        continue;
                                } else {
                                        int subCol = line.indexOf(MultipleLineCommentEnd) + MultipleLineCommentEnd.length();
                                        line = line.substring(subCol);
                                        args.currentCol += (subCol + 1);
                                        args.multipleLineComment = false;
                                }
                        }

                        // the line is nothing but comment
                        if (line.trim().startsWith(COMMENT)) {
                                line = reader.readLine();
                                continue;
                        }

                        int COMMENT_index = line.indexOf(COMMENT);
                        if (COMMENT_index != -1) {
                                String pre = line.substring(0, COMMENT_index);
                                String post = line.substring(COMMENT_index);
                                for (Map.Entry<String, String> definedEntry : args.defined.entrySet()) {
                                        String tmp = pre;
                                        pre = pre.replace(definedEntry.getKey(), definedEntry.getValue());
                                        if (!tmp.equals(pre)) {
                                                args.useDefine.put(definedEntry.getKey(), definedEntry.getValue());
                                        }
                                }
                                line = pre + post;
                        } else {
                                for (Map.Entry<String, String> definedEntry : args.defined.entrySet()) {
                                        String tmp = line;
                                        line = line.replace(definedEntry.getKey(), definedEntry.getValue());
                                        if (!tmp.equals(line)) {
                                                args.useDefine.put(definedEntry.getKey(), definedEntry.getValue());
                                        }
                                }
                        }

                        // get front spaces
                        int spaces = 0;
                        for (int i = 0; i < line.length(); ++i) {
                                if (line.charAt(i) != ' ') {
                                        spaces = i;
                                        break;
                                }
                        }

                        if (args.currentCol == properties._COLUMN_BASE_) {
                                args.currentCol += spaces + 1;
                        }

                        // remove front and end spaces
                        line = line.trim();

                        // check it's an empty line
                        if (line.isEmpty()) {
                                line = reader.readLine();
                                continue;
                        }

                        // start parsing
                        scan(line, args);

                        if (!args.multipleLineComment) {

                                if (args.previous instanceof Element) {
                                        args.previous = new EndingNode(args, EndingNode.WEAK);
                                }
                        }

                        line = reader.readLine();
                }
        }

        /**
         * when the given line is not empty, do scanning.<br>
         * <ol>
         * <li>check whether the line contains tokens in {@link #SPLIT}<br>
         * get the most front token, if several tokens are at the same position, then choose the longest one</li>
         * <li>if the token not found, consider the whole line as one element and append to previous node</li>
         * <li>else</li>
         * <li>record text before the token as an element and do appending</li>
         * <li>check which category the token is in<br>
         * <ul>
         * <li>{@link #LAYER} means starts after recording the token, a new ElementStartNode should be started, invoke {@link #createStartNode(Args, int)}</li>
         * <li>{@link #SPLIT_X}: the previous element and next element should be in the same layer. if it's also among {@link #NO_RECORD}, the token won't be recorded</li>
         * <li>{@link #STRING}: the next element is a string or a character. these characters should be considered as one element</li>
         * <li>{@link #ENDING}: append a new {@link EndingNode} to prevent generated nodes being ambiguous. NOTE that it only means the end of an expression or a statement. not the parsing process</li>
         * <li>{@link #COMMENT}: it's the start of a comment. the following chars would be ignored</li>
         * <li>{@link #PAIR}: for keys, it will start a new layer. for values, it will end the layer created by the key</li>
         * </ul>
         * </li>
         * </ol><br>
         * here's an example of how the method works<br>
         * given the following input:<br>
         * <pre>
         * val map={'name':'cass'}
         * </pre>
         * <ol>
         * <li>the most front and longest token is ' ', and ' ' is in {@link #NO_RECORD} ::: <code>val/map={'name':'cass'}</code></li>
         * <li>the most front and longest token is '=' ::: <code>val/map/=/{'name':'cass'}</code></li>
         * <li>the most front and longest token is '{', and '{' is a key of {@link #PAIR} ::: <code>val/map/=/{/(LAYER-START/'name':'cass'})</code></li>
         * <li>the most front and longest token is "'", and "'" is in {@link #STRING} ::: <code>val/map/=/{/(LAYER-START/'name'/:'cass'})</code></li>
         * <li>the most front and longest token is ':' ::: <code>val/map/=/{/(LAYER-START/'name'/:/'cass'})</code></li>
         * <li>the most front and longest token is "'", and "'" is in {@link #STRING} ::: <code>val/map/=/{/(LAYER-START/'name'/:/'cass'/})</code></li>
         * <li>the most front and longest token is "}", and '}' is a value of {@link #PAIR} ::: <code>val/map/=/{/(LAYER-START/'name'/:/'cass')}</code></li>
         * </ol><br>
         * the result is <code>val/map/=/{/(LAYER-START/'name'/:/'cass')}</code><br>
         * set a breakpoint in the method and focus on variable <tt>line</tt>, you will get exactly the same intermediate results
         *
         * @param line line to parse
         * @param args args context
         * @throws SyntaxException syntax exceptions, including {@link SyntaxException}, {@link UnexpectedTokenException}
         */
        private void scan(String line, Args args) throws SyntaxException {
                if (line.isEmpty()) return;

                // check multiple line comment
                if (args.multipleLineComment) {
                        if (line.contains(MultipleLineCommentEnd)) {
                                int subCol = line.indexOf(MultipleLineCommentEnd) + MultipleLineCommentEnd.length();
                                args.currentCol += subCol;
                                line = line.substring(subCol);
                                args.multipleLineComment = false;
                        } else {
                                return;
                        }
                }

                // check SPLIT
                // find the pattern at minimum location index and with longest words
                int minIndex = line.length();
                String token = null; // recorded token
                for (String s : SPLIT) {
                        if (line.contains(s)) {
                                int index = line.indexOf(s);
                                if (index != -1 && index < minIndex) {
                                        minIndex = index;
                                        token = s;
                                }
                        }
                }

                if (token == null) {
                        if (!line.isEmpty()) {
                                // not found, simply append whole input to previous
                                TokenType type = getTokenType(line, args.generateLineCol());
                                if (type != null) {
                                        // unknown token, ignore this token
                                        args.previous = new Element(args, line, type);
                                        args.currentCol += line.length();
                                }
                        }
                } else {
                        String copyOfLine = line;
                        String str = line.substring(0, minIndex);
                        if (!str.isEmpty()) {
                                // record text before the token
                                TokenType type = getTokenType(str, args.generateLineCol());
                                if (type != null) {
                                        args.previous = new Element(args, str, type);
                                }
                                args.currentCol += str.length();
                        }

                        if (LAYER.contains(token)) {
                                // start new layer
                                args.previous = new Element(args, token, getTokenType(token, args.generateLineCol()));
                                createStartNode(args, args.startNodeStack.lastElement().getIndent().getIndent() + 4);
                        } else if (SPLIT_X.contains(token)) {
                                // do split check
                                if (!NO_RECORD.contains(token)) {
                                        // record this token
                                        args.previous = new Element(args, token, getTokenType(token, args.generateLineCol()));
                                }
                        } else if (STRING.contains(token)) {
                                // string literal
                                int lastIndex = minIndex;
                                while (true) {
                                        int index = line.indexOf(token, lastIndex + token.length());
                                        if (token.equals("//")) {
                                                while (line.length() > index + 2) {
                                                        if (line.charAt(index + 2) == '/') {
                                                                ++index;
                                                        } else {
                                                                break;
                                                        }
                                                }
                                        }
                                        if (line.length() <= 1 || index == -1) {
                                                err.SyntaxException("end of string not found", args.generateLineCol());
                                                // assume that the end is line end
                                                err.debug("assume that the " + token + " end is line end");

                                                String generated = line.substring(minIndex) + token;

                                                args.previous = new Element(args, generated, getTokenType(generated, args.generateLineCol()));
                                                args.currentCol += (index - minIndex) - token.length(); // the length would be added in later steps
                                                line = line.substring(index + 1);

                                                break;
                                        } else {
                                                String c = String.valueOf(line.charAt(index - 1));
                                                // check
                                                boolean isStringEnd = !ESCAPE.equals(c) || checkStringEnd(line, index - 1);

                                                if (isStringEnd) {
                                                        // the string starts at minIndex and ends at index
                                                        String s = line.substring(minIndex, index + token.length());

                                                        args.previous = new Element(args, s, getTokenType(s, args.generateLineCol()));
                                                        args.currentCol += (index - minIndex);
                                                        line = line.substring(index + token.length());
                                                        break;
                                                }

                                                lastIndex = index;
                                        }
                                }
                        } else if (ENDING.contains(token)) {
                                // ending
                                if (args.previous instanceof Element) {
                                        args.previous = new EndingNode(args, EndingNode.STRONG);
                                }
                        } else if (COMMENT.equals(token)) {
                                // comment
                                line = ""; // ignore all
                        } else if (PAIR.containsKey(token)) {
                                // pair start
                                args.previous = new Element(args, token, getTokenType(token, args.generateLineCol()));
                                createStartNode(args, args.startNodeStack.lastElement().getIndent().getIndent() + 4);
                                args.pairEntryStack.push(new PairEntry(token, args.startNodeStack.lastElement()));
                        } else if (PAIR.containsValue(token)) {
                                // pair end
                                PairEntry entry = args.pairEntryStack.pop();
                                String start = entry.key;
                                if (!token.equals(PAIR.get(start))) {
                                        err.UnexpectedTokenException(PAIR.get(start), token, args.generateLineCol());
                                        // assume that the pair ends
                                        err.debug("assume that the pair ends");
                                }

                                ElementStartNode startNode = entry.startNode;
                                if (startNode.hasNext()) {
                                        err.SyntaxException(
                                                "indentation of " + startNode.next() + " should be " + startNode.getIndent(),
                                                startNode.next().getLineCol());
                                        // fill the LinkedNode with all nodes after the startNode
                                        Node n = startNode.next();
                                        n.setPrevious(null);
                                        startNode.setNext(null);
                                        startNode.setLinkedNode(n);
                                }

                                if (args.startNodeStack.lastElement().getIndent().getIndent() >= startNode.getIndent().getIndent()) {
                                        redirectToPairStart(args, startNode.getIndent());
                                } else {
                                        args.previous = startNode;
                                }
                                args.previous = new Element(args, PAIR.get(start), getTokenType(token, args.generateLineCol()));
                        } else if (token.equals(MultipleLineCommentStart)) {
                                if (!args.multipleLineComment) {
                                        args.multipleLineComment = true;
                                }
                        } else {
                                err.UnknownTokenException(token, args.generateLineCol());
                                // unknown token
                                // simply ignore the token
                        }

                        // column
                        args.currentCol += token.length();
                        if (copyOfLine.equals(line)) {
                                // line hasn't changed, do default modification
                                line = line.substring(minIndex + token.length());
                        }
                        // recursively parse
                        scan(line, args);
                }
        }

        @Override
        protected void finalCheck(ElementStartNode root) throws UnknownTokenException {
                super.finalCheck(root);

                if (root.hasLinkedNode()) {
                        Node n = root.getLinkedNode();
                        // remove redundant start node
                        if (!n.hasNext() && n instanceof ElementStartNode) {
                                Node newN = ((ElementStartNode) n).getLinkedNode();
                                root.setLinkedNode(newN);
                                n = newN;
                        }

                        // remove braces
                        while (n != null) {
                                if (n instanceof Element) {
                                        if (((Element) n).getContent().equals("{")
                                                || ((Element) n).getContent().equals("}")) {
                                                removeBraces(root, (Element) n);
                                        }
                                }
                                n = n.next();
                        }
                }
        }

        private void removeBraces(ElementStartNode root, Element n) {

                if (n.hasPrevious()) {
                        n.previous().setNext(n.next());
                } else if (n.getContent().equals("{")) {
                        root.setLinkedNode(n.next());
                }
                if (n.hasNext()) {
                        n.next().setPrevious(n.previous());
                }
        }
}


================================================
FILE: latte-compiler/src/main/java/lt/compiler/CodeGenerator.java
================================================
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2016 KuiGang Wang
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package lt.compiler;

import lt.compiler.semantic.*;
import lt.compiler.semantic.builtin.*;
import lt.compiler.util.Consts;
import lt.compiler.util.LocalVariables;
import lt.dependencies.asm.*;
import lt.lang.Pointer;

import java.util.*;

/**
 * The code generator, generate byte code from STypeDef.
 */
public class CodeGenerator {
        private final Set<STypeDef> types;
        private final Map<String, STypeDef> typeDefMap;
        private static final int VERSION = Opcodes.V1_6;

        /**
         * create the code generator with types to generate
         *
         * @param types      types
         * @param typeDefMap a map of type name to its representing object
         */
        public CodeGenerator(Set<STypeDef> types, Map<String, STypeDef> typeDefMap) {
                this.types = types;
                this.typeDefMap = typeDefMap;
        }

        /**
         * visit line number attribute
         *
         * @param methodVisitor method visitor
         * @param lineCol       the line col (can be null)
         * @param label         the label to visit
         */
        private void VisitLineNumber(MethodVisitor methodVisitor, LineCol lineCol, Label label) {
                if (lineCol == null || lineCol.line <= 0) return;
                methodVisitor.visitLineNumber(lineCol.line, label);
        }

        /**
         * generate modifiers
         *
         * @param modifiers modifiers
         * @return an integer representing modifiers
         */
        private int acc(List<SModifier> modifiers) {
                int acc = 0;
                for (SModifier m : modifiers) {
                        acc |= m.flag;
                }
                return acc;
        }

        /**
         * get type descriptor of the given type.<br>
         * e.g. <code>Ljava/lang/Object;</code>
         *
         * @param type type
         * @return type descriptor
         */
        private String typeToDesc(STypeDef type) {
                StringBuilder sb = new StringBuilder();
                if (type instanceof PrimitiveTypeDef) {
                        if (type.equals(IntTypeDef.get())) sb.append("I");
                        else if (type.equals(LongTypeDef.get())) sb.append("J");
                        else if (type.equals(ShortTypeDef.get())) sb.append("S");
                        else if (type.equals(ByteTypeDef.get())) sb.append("B");
                        else if (type.equals(BoolTypeDef.get())) sb.append("Z");
                        else if (type.equals(FloatTypeDef.get())) sb.append("F");
                        else if (type.equals(DoubleTypeDef.get())) sb.append("D");
                        else if (type.equals(CharTypeDef.get())) sb.append("C");
                        else throw new LtBug("unknown primitive: " + type);
                } else if (type instanceof SArrayTypeDef) {
                        SArrayTypeDef arr = (SArrayTypeDef) type;
                        for (int i = 0; i < arr.dimension(); ++i) sb.append("[");
                        sb.append(typeToDesc(arr.type()));
                } else if (type.equals(VoidType.get())) {
                        sb.append("V");
                } else {
                        // object L...;
                        sb.append("L").append(typeToInternalName(type)).append(";");
                }
                return sb.toString();
        }

        /**
         * get internal name of a type.<br>
         * e.g. <code>java/lang/Object</code>
         *
         * @param type type
         * @return internal name
         */
        private String typeToInternalName(STypeDef type) {
                if (type.equals(NullTypeDef.get())) return "java/lang/Object";
                if (type instanceof SArrayTypeDef) {
                        return typeToDesc(type);
                } else return type.fullName().replace(".", "/");
        }

        /**
         * get method descriptor.<br>
         * e.g. <code>(II)Ljava/lang/Runnable;</code>
         *
         * @param returnType return type
         * @param parameters parameter types
         * @return method descriptor
         */
        private String methodDesc(STypeDef returnType, List<STypeDef> parameters) {
                StringBuilder desc = new StringBuilder();
                desc.append("(");
                for (STypeDef t : parameters) {
                        desc.append(typeToDesc(t));
                }
                desc.append(")").append(typeToDesc(returnType));
                return desc.toString();
        }

        private String methodDescWithParameters(STypeDef returnType, List<SParameter> parameters) {
                List<STypeDef> types = new ArrayList<STypeDef>();
                for (SParameter p : parameters) {
                        if (p.isCapture() && !p.isUsed()) {
                                // ignore captured but not used params
                                continue;
                        }
                        types.add(p.type());
                }
                return methodDesc(returnType, types);
        }

        /**
         * start the generating process.
         *
         * @return Map&lt;FileName, byte[]&gt;
         */
        public Map<String, byte[]> generate() {
                Map<String, byte[]> result = new HashMap<String, byte[]>();
                for (STypeDef type : types) {
                        ClassWriter classWriter = new SClassWriter(ClassWriter.COMPUTE_FRAMES, typeDefMap);

                        List<SModifier> modifiers;                // modifier
                        List<Instruction> staticIns;              // <clinit>
                        List<ExceptionTable> exceptionTables;     // exception table for <clinit>
                        InvokableMeta staticMeta; // meta
                        List<SConstructorDef> constructors = null;// constructor
                        List<SFieldDef> fields;                   // field
                        List<SMethodDef> methods;                 // method
                        List<SAnno> annos = type.annos();         // annotations
                        SClassDef superClass = null;              // super class
                        List<SInterfaceDef> superInterfaces;      // super interface
                        String fileName = type.line_col().fileName; // file name

                        classWriter.visitSource(fileName, fileName);

                        if (type instanceof SClassDef) {
                                modifiers = ((SClassDef) type).modifiers();
                                staticIns = ((SClassDef) type).staticStatements();
                                exceptionTables = ((SClassDef) type).staticExceptionTable();
                                staticMeta = ((SClassDef) type).staticMeta();
                                constructors = ((SClassDef) type).constructors();
                                fields = ((SClassDef) type).fields();
                                methods = ((SClassDef) type).methods();
                                superInterfaces = ((SClassDef) type).superInterfaces();
                                superClass = ((SClassDef) type).parent();
                        } else if (type instanceof SInterfaceDef) {
                                modifiers = ((SInterfaceDef) type).modifiers();
                                staticIns = ((SInterfaceDef) type).staticStatements();
                                exceptionTables = ((SInterfaceDef) type).staticExceptionTable();
                                staticMeta = ((SInterfaceDef) type).staticMeta();
                                fields = ((SInterfaceDef) type).fields();
                                methods = ((SInterfaceDef) type).methods();
                                superInterfaces = ((SInterfaceDef) type).superInterfaces();
                        } else {
                                // generate annotation
                                generateAnnotation(classWriter, (SAnnoDef) type);
                                classWriter.visitEnd();
                                result.put(type.fullName(), classWriter.toByteArray());
                                continue;
                        }

                        String[] interfaces = new String[superInterfaces.size()];
                        for (int i = 0; i < interfaces.length; ++i) {
                                interfaces[i] = typeToInternalName(superInterfaces.get(i));
                        }

                        classWriter.visit(VERSION, acc(modifiers) | (type instanceof SClassDef ? 0 : Opcodes.ACC_INTERFACE),
                                typeToInternalName(type), null, superClass == null ? "java/lang/Object" : typeToInternalName(superClass), interfaces);

                        // annotations
                        for (SAnno anno : annos) {
                                AnnotationVisitor annotationVisitor = classWriter.visitAnnotation(typeToDesc(anno.type()),
                                        annotationIsVisible(anno));
                                buildAnnotation(annotationVisitor, anno);
                        }

                        buildStatic(classWriter, staticIns, exceptionTables, staticMeta);
                        buildField(classWriter, fields);
                        if (constructors != null) {
                                buildConstructor(classWriter, constructors);
                        }
                        buildMethod(classWriter, methods);
                        classWriter.visitEnd();

                        result.put(type.fullName(), classWriter.toByteArray());
                }
                return result;
        }

        private void generateAnnotation(ClassWriter classWriter, SAnnoDef sAnnoDef) {
                classWriter.visit(VERSION,
                        Opcodes.ACC_INTERFACE | Opcodes.ACC_ANNOTATION | Opcodes.ACC_ABSTRACT | Opcodes.ACC_PUBLIC,
                        typeToInternalName(sAnnoDef), null, "java/lang/Object",
                        new String[]{"java/lang/annotation/Annotation"});

                // annontations
                for (SAnno anno : sAnnoDef.annos()) {
                        AnnotationVisitor annotationVisitor = classWriter.visitAnnotation(typeToDesc(anno.type()),
                                annotationIsVisible(anno));
                        buildAnnotation(annotationVisitor, anno);
                }

                // annotation fields (which are generated as methods on jvm)
                for (SAnnoField f : sAnnoDef.annoFields()) {
                        int acc = Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT;
                        MethodVisitor methodVisitor = classWriter.visitMethod(
                                acc, f.name(), methodDesc(f.type(), Collections.<STypeDef>emptyList()),
                                null, new String[0]
                        );
                        if (f.defaultValue() != null) {
                                AnnotationVisitor annotationVisitor = methodVisitor.visitAnnotationDefault();
                                buildAnnotationValue(annotationVisitor, f.name(), f.defaultValue());
                        }
                        methodVisitor.visitEnd();
                }
        }

        /**
         * build new<.br>
         * <br>
         * <code>
         * new TYPE<br>
         * dup<br>
         * InvokeSpecial
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param aNew          Ins.New
         */
        private void buildNew(MethodVisitor methodVisitor, CodeInfo info, Ins.New aNew) {
                methodVisitor.visitTypeInsn(Opcodes.NEW, typeToInternalName(aNew.type()));
                info.push(CodeInfo.Size._1);
                methodVisitor.visitInsn(Opcodes.DUP);
                info.push(CodeInfo.Size._1);
                for (Value v : aNew.args()) {
                        buildValueAccess(methodVisitor, info, v, true);
                }

                Label label = new Label();
                methodVisitor.visitLabel(label);

                methodVisitor.visitMethodInsn(
                        Opcodes.INVOKESPECIAL,
                        typeToInternalName(aNew.type()),
                        "<init>",
                        methodDescWithParameters(
                                VoidType.get(),
                                aNew.constructor().getParameters()),
                        false);
                info.pop(1 + aNew.args().size());

                VisitLineNumber(methodVisitor, aNew.line_col(), label);
        }

        /**
         * build cast.<br>
         * <br>
         * <code>
         * buildValueAccess ------- original value<br>
         * castIns
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param cast          Ins.Cast
         */
        private void buildCast(MethodVisitor methodVisitor, CodeInfo info, Ins.Cast cast) {
                buildValueAccess(methodVisitor, info, cast.value(), true);

                Label label = new Label();
                methodVisitor.visitLabel(label);

                methodVisitor.visitInsn(cast.castMode());
                if (cast.castMode() == Ins.Cast.CAST_FLOAT_TO_DOUBLE
                        || cast.castMode() == Ins.Cast.CAST_INT_TO_DOUBLE
                        || cast.castMode() == Ins.Cast.CAST_LONG_TO_DOUBLE) {
                        info.pop(1);
                        info.push(CodeInfo.Size._2);
                } else {
                        info.pop(1);
                        info.push(CodeInfo.Size._1);
                }

                VisitLineNumber(methodVisitor, cast.line_col(), label);
        }

        /**
         * build two variable operation.<br>
         * <br>
         * <code>
         * buildValueAccess ------ a<br>
         * buildValueAccess ------ b<br>
         * twoVarOpIns ----------- operator
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param twoVarOp      Ins.TwoVarOp
         */
        private void buildTwoVarOp(MethodVisitor methodVisitor, CodeInfo info, Ins.TwoVarOp twoVarOp) {
                buildValueAccess(methodVisitor, info, twoVarOp.a(), true);
                buildValueAccess(methodVisitor, info, twoVarOp.b(), true);
                methodVisitor.visitInsn(twoVarOp.op());
                info.pop(2);
                if (twoVarOp.op() == Ins.TwoVarOp.Dadd
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Ddiv
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Dmul
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Drem
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Dsub
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Ladd
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Land
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Ldiv
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lmul
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lor
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lrem
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lshl
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lshr
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lsub
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lushr
                        ||
                        twoVarOp.op() == Ins.TwoVarOp.Lxor)

                        info.push(CodeInfo.Size._2);
                else info.push(CodeInfo.Size._1);
        }

        /**
         * build logicAND.<br>
         * <br>
         * <code>
         * buildValueAccess<br>
         * IfEq flag ----------- false<br>
         * buildValueAccess<br>
         * IfEq flag ----------- false<br>
         * IConst_1<br>
         * goto nop<br>
         * flag: IConst_0<br>
         * nop
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param logicAnd      Ins.LogicAnd
         */
        private void buildLogicAnd(MethodVisitor methodVisitor, CodeInfo info, Ins.LogicAnd logicAnd) {
                /*
                 * if eq b1 goto flag (if b1==false goto flag)
                 * if eq b2 goto flag (if b2==false goto flag)
                 * true               (push true into stack)
                 * goto nop           (goto nop, skip `else` branch)
                 * flag: false        (flag: push false into stack)
                 * nop                (nop)
                 */
                // b1
                buildValueAccess(methodVisitor, info, logicAnd.b1(), true);
                // if eq goto flag
                Label flag = new Label();
                methodVisitor.visitJumpInsn(Opcodes.IFEQ, flag);
                info.pop(1);
                // b2
                buildValueAccess(methodVisitor, info, logicAnd.b2(), true);
                // if eq goto flag
                methodVisitor.visitJumpInsn(Opcodes.IFEQ, flag);
                info.pop(1);
                // true
                methodVisitor.visitInsn(Opcodes.ICONST_1);
                // goto nop
                Label nop = new Label();
                methodVisitor.visitJumpInsn(Opcodes.GOTO, nop);
                // flag: false
                methodVisitor.visitLabel(flag);
                methodVisitor.visitInsn(Opcodes.ICONST_0);
                // nop
                methodVisitor.visitLabel(nop);
                methodVisitor.visitInsn(Opcodes.NOP);

                info.push(CodeInfo.Size._1); // push true or false into stack
        }

        /**
         * eval `left` and cast to bool
         * check if it's true
         * if true then return the `left` value
         * else ignore the `left`
         * do eval and return `right`
         * <p>
         * <p>
         * v1 (stack is [v1])
         * dup ([v1 v1]
         * castToBool ([v1 I])
         * if ne goto nop ([v1]) // I is 1
         * pop ([])
         * v2 ([v2])
         * nop (v1/v2)
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param logicOr       Ins.LogicOr
         */
        private void buildLogicOr(MethodVisitor methodVisitor, CodeInfo info, Ins.LogicOr logicOr) {
                buildValueAccess(methodVisitor, info, logicOr.v1(), true); // [v1]
                methodVisitor.visitInsn(Opcodes.DUP); // dup [v1 v1]
                info.push(CodeInfo.Size._1);
                // invoke castToBool
                SMethodDef castToBool = logicOr.getCastToBool();
                methodVisitor.visitMethodInsn(
                        Opcodes.INVOKESTATIC,
                        typeToInternalName(castToBool.declaringType()),
                        castToBool.name(),
                        methodDescWithParameters(
                                castToBool.getReturnType(),
                                castToBool.getParameters()),
                        false);
                info.pop(1);
                info.push(CodeInfo.Size._1);
                // [v1 I]
                // if ne goto flag
                Label flag = new Label();
                methodVisitor.visitJumpInsn(Opcodes.IFNE, flag); // goto flag(nop)
                info.pop(1);
                // pop
                methodVisitor.visitInsn(Opcodes.POP); // [(empty stack)]
                info.pop(1);
                // v2
                buildValueAccess(methodVisitor, info, logicOr.v2(), true); // v2
                // flag: nop
                methodVisitor.visitLabel(flag);
                methodVisitor.visitInsn(Opcodes.NOP);
        }

        /**
         * build TALoad.<br>
         * <br>
         * <code>
         * buildValueAccess<br>
         * buildValueAccess -------- the array<br>
         * buildValueAccess -------- the index<br>
         * TALoad
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param TALoad        Ins.TALoad
         */
        private void buildTALoad(MethodVisitor methodVisitor, CodeInfo info, Ins.TALoad TALoad) {
                buildValueAccess(methodVisitor, info, TALoad.arr(), true);
                buildValueAccess(methodVisitor, info, TALoad.index(), true);

                Label label = new Label();
                methodVisitor.visitLabel(label);

                methodVisitor.visitInsn(TALoad.mode());
                info.pop(2);
                info.push(CodeInfo.Size._1);

                VisitLineNumber(methodVisitor, TALoad.line_col(), label);
        }

        /**
         * build OneVarOp.<br>
         * <br>
         * <code>
         * buildValueAccess ------ the value<br>
         * OneVarOp
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param oneVarOp      Ins.OneVarOp
         */
        private void buildOneVarOp(MethodVisitor methodVisitor, CodeInfo info, Ins.OneVarOp oneVarOp) {
                buildValueAccess(methodVisitor, info, oneVarOp.value(), true);
                methodVisitor.visitInsn(oneVarOp.op());

                if (oneVarOp.op() == Ins.OneVarOp.Dneg
                        || oneVarOp.op() == Ins.OneVarOp.Lneg) {
                        info.pop(1);
                        info.push(CodeInfo.Size._2);
                } else {
                        info.pop(1);
                        info.push(CodeInfo.Size._1);
                }
        }

        /**
         * build NewArray.<br>
         * <br>
         * <code>
         * buildPrimitive ------ array length<br>
         * NewArray<br>
         * foreach v in initValues<br>
         * &nbsp;&nbsp;DUP<br>
         * &nbsp;&nbsp;Ldc index<br>
         * &nbsp;&nbsp;buildValueAccess ---- the value to assign in<br>
         * &nbsp;&nbsp;TAStore
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param newArray      Ins.NewArray
         */
        private void buildNewArray(MethodVisitor methodVisitor, CodeInfo info, Ins.NewArray newArray) {
                buildPrimitive(methodVisitor, info, newArray.count());
                methodVisitor.visitIntInsn(Opcodes.NEWARRAY, newArray.mode());
                // pop 1 and push 1
                int i = 0;
                for (Value v : newArray.initValues()) {
                        methodVisitor.visitInsn(Opcodes.DUP); // array ref
                        info.push(CodeInfo.Size._1);
                        methodVisitor.visitLdcInsn(i); // index
                        info.push(CodeInfo.Size._1);
                        buildValueAccess(methodVisitor, info, v, true); // value

                        methodVisitor.visitInsn(newArray.storeMode());
                        info.pop(3);
                        ++i;
                }
                // stack have one element (the array)
        }

        /**
         * build ANewArray.<br>
         * <br>
         * <code>
         * buildPrimitive ---- array length<br>
         * ANewArray Type<br>
         * foreach v in initValues<br>
         * &nbsp;&nbsp;DUP<br>
         * &nbsp;&nbsp;Ldc ---- index<br>
         * &nbsp;&nbsp;buildValueAccess ---- the value to set<br>
         * &nbsp;&nbsp;AAStore
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param aNewArray     Ins.ANewArray
         */
        private void buildANewArray(MethodVisitor methodVisitor, CodeInfo info, Ins.ANewArray aNewArray) {
                buildPrimitive(methodVisitor, info, aNewArray.count());
                methodVisitor.visitTypeInsn(Opcodes.ANEWARRAY, typeToInternalName(aNewArray.componentType()));
                // pop 1 and push 1
                int i = 0;
                for (Value v : aNewArray.initValues()) {
                        methodVisitor.visitInsn(Opcodes.DUP); // array ref
                        info.push(CodeInfo.Size._1);
                        methodVisitor.visitLdcInsn(i); // index
                        info.push(CodeInfo.Size._1);
                        buildValueAccess(methodVisitor, info, v, true); // value

                        methodVisitor.visitInsn(Opcodes.AASTORE);
                        info.pop(3);
                        ++i;
                }
                // stack have one element (the array)
        }

        /**
         * build NewList.<br>
         * <br>
         * <code>
         * NEW Type<br>
         * DUP<br>
         * InvokeSpecial init<br>
         * foreach v in initValues<br>
         * &nbsp;&nbsp;DUP<br>
         * &nbsp;&nbsp;buildValueAccess ----- value to add<br>
         * &nbsp;&nbsp;InvokeVirtual add(Object)
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param newList       Ins.NewList
         */
        private void buildNewList(MethodVisitor methodVisitor, CodeInfo info, Ins.NewList newList) {
                // newList is LinkedList
                methodVisitor.visitTypeInsn(Opcodes.NEW, typeToInternalName(newList.type()));
                info.push(CodeInfo.Size._1);
                methodVisitor.visitInsn(Opcodes.DUP);
                info.push(CodeInfo.Size._1);
                methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, typeToInternalName(newList.type()), "<init>", "()V", false);
                info.pop(1);

                for (Value v : newList.initValues()) {
                        methodVisitor.visitInsn(Opcodes.DUP); // list ref
                        info.push(CodeInfo.Size._1);
                        buildValueAccess(methodVisitor, info, v, true); // arg
                        methodVisitor.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z", true);
                        info.pop(2);
                        info.push(CodeInfo.Size._1); // the add result (boolean add(Object))
                        methodVisitor.visitInsn(Opcodes.POP);
                        info.pop(1);
                }
                // stack have one element (the list)
        }

        /**
         * build NewMap.<br>
         * <br>
         * <code>
         * New Type<br>
         * DUP<br>
         * InvokeSpecial init<br>
         * foreach k,v in initValues<br>
         * &nbsp;&nbsp;DUP<br>
         * &nbsp;&nbsp;buildValueAccess ---- key<br>
         * &nbsp;&nbsp;buildValueAccess ---- value<br>
         * &nbsp;&nbsp;InvokeVirtual ---- put(Object,Object)
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param newMap        Ins.NewMap
         */
        private void buildNewMap(MethodVisitor methodVisitor, CodeInfo info, Ins.NewMap newMap) {
                methodVisitor.visitTypeInsn(Opcodes.NEW, typeToInternalName(newMap.type()));
                info.push(CodeInfo.Size._1);
                methodVisitor.visitInsn(Opcodes.DUP);
                info.push(CodeInfo.Size._1);

                methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL,
                        typeToInternalName(newMap.type()),
                        "<init>",
                        "()V", false);
                info.pop(1);

                for (Map.Entry<Value, Value> entry : newMap.initValues().entrySet()) {
                        methodVisitor.visitInsn(Opcodes.DUP);
                        info.push(CodeInfo.Size._1);
                        buildValueAccess(methodVisitor, info, entry.getKey(), true);
                        buildValueAccess(methodVisitor, info, entry.getValue(), true);

                        methodVisitor.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                                "java/util/Map",
                                "put",
                                "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", true);
                        info.pop(3);
                        info.push(CodeInfo.Size._1); // the put result (Object put(Object,Object))
                        methodVisitor.visitInsn(Opcodes.POP);
                        info.pop(1);
                }
                // stack have one element (the map)
        }

        /**
         * build value pack
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param value         the value pack
         * @param requireValue  require a value
         */
        private void buildValuePack(MethodVisitor methodVisitor, CodeInfo info, ValuePack value, boolean requireValue) {
                int depth = info.getCurrentStackDepth();
                List<Instruction> instructions = value.instructions();
                for (int i = 0; i < instructions.size() - 1; ++i) {
                        buildOneIns(methodVisitor, info, instructions.get(i), true);

                        if (value.autoPop()) {
                                while (info.getCurrentStackDepth() != depth) {
                                        if (info.peekSize() == CodeInfo.Size._1) {
                                                methodVisitor.visitInsn(Opcodes.POP);
                                        } else {
                                                methodVisitor.visitInsn(Opcodes.POP2);
                                        }
                                        info.pop(1);
                                }
                        }
                }

                Instruction ins = instructions.get(instructions.size() - 1);
                boolean buildLastStmt;
                if (!value.autoPop()) {
                        // not auto pop
                        buildLastStmt = true;
                } else {
                        // auto pop
                        if (requireValue) {
                                // require a value
                                buildLastStmt = true;
                        } else {
                                // doesn't require a value
                                if (ins instanceof ReadOnly) {
                                        // read only
                                        buildLastStmt = false;
                                } else {
                                        // not read only
                                        // check LtRuntime.getField and Unit.get
                                        if (ins instanceof Ins.InvokeStatic) {
                                                Ins.InvokeStatic is = (Ins.InvokeStatic) ins;
                                                SMethodDef theMethod = (SMethodDef) is.invokable();
                                                if (
                                                        theMethod.name().equals("getField")
                                                                &&
                                                                theMethod.declaringType().fullName().equals("lt.runtime.LtRuntime")) {
                                                        // lt.runtime.LtRuntime.getField
                                                        buildLastStmt = false;
                                                } else if (
                                                        theMethod.name().equals("get")
                                                                &&
                                                                theMethod.declaringType().fullName().equals("lt.lang.Unit")) {
                                                        // lt.lang.Unit.get
                                                        buildLastStmt = false;
                                                } else {
                                                        buildLastStmt = true;
                                                }
                                        } else {
                                                buildLastStmt = true;
                                        }
                                }
                        }
                }

                if (buildLastStmt) {
                        buildOneIns(methodVisitor, info, ins, requireValue);
                }
        }

        private int calculateIndexForLocalVariable(LeftValue theVar, SemanticScope scope, CodeInfo info) {
                return LocalVariables.calculateIndexForLocalVariable(theVar, scope, info.isStatic());
        }

        /**
         * build Value.
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param value         the value to build
         * @param requireValue  requires a value when generating {@link ValuePack}
         * @see Value
         * @see lt.compiler.semantic.Ins.This
         * @see lt.compiler.semantic.Ins.GetStatic
         * @see lt.compiler.semantic.Ins.TLoad
         * @see StringConstantValue
         * @see PrimitiveValue
         * @see lt.compiler.semantic.Ins.Invoke
         * @see lt.compiler.semantic.Ins.New
         * @see lt.compiler.semantic.Ins.Cast
         * @see lt.compiler.semantic.Ins.TwoVarOp
         * @see ValuePack
         * @see lt.compiler.semantic.Ins.GetField
         * @see lt.compiler.semantic.Ins.LogicAnd
         * @see lt.compiler.semantic.Ins.LogicOr
         * @see lt.compiler.semantic.Ins.GetClass
         * @see lt.compiler.semantic.Ins.TALoad
         * @see NullValue
         * @see lt.compiler.semantic.Ins.ArrayLength
         * @see lt.compiler.semantic.Ins.OneVarOp
         * @see lt.compiler.semantic.Ins.NewArray
         * @see lt.compiler.semantic.Ins.ANewArray
         * @see lt.compiler.semantic.Ins.NewList
         * @see lt.compiler.semantic.Ins.NewMap
         * @see lt.compiler.semantic.Ins.CheckCast
         */
        private void buildValueAccess(MethodVisitor methodVisitor, CodeInfo info, Value value, boolean requireValue) {
                if (value instanceof Ins.This) {
                        methodVisitor.visitVarInsn(Opcodes.ALOAD, 0);
                        info.push(CodeInfo.Size._1);
                } else if (value instanceof Ins.GetStatic) {
                        // getStatic
                        Ins.GetStatic getStatic = (Ins.GetStatic) value;

                        Label label = new Label();
                        methodVisitor.visitLabel(label);

                        methodVisitor.visitFieldInsn(
                                Opcodes.GETSTATIC,
                                typeToInternalName(getStatic.field().declaringType()),
                                getStatic.field().name(), typeToDesc(getStatic.field().type()));

                        if (getStatic.field().type().equals(DoubleTypeDef.get())
                                || (getStatic.field().type().equals(LongTypeDef.get())))
                                info.push(CodeInfo.Size._2);
                        else info.push(CodeInfo.Size._1);

                        VisitLineNumber(methodVisitor, ((Ins.GetStatic) value).line_col(), label);
                } else if (value instanceof Ins.TLoad) {
                        // tLoad
                        Ins.TLoad tLoad = (Ins.TLoad) value;

                        Label label = new Label();
                        methodVisitor.visitLabel(label);

                        int index = calculateIndexForLocalVariable(tLoad.value(), tLoad.getScope(), info);
                        methodVisitor.visitVarInsn(tLoad.mode(), index);
                        if (tLoad.mode() == Ins.TLoad.Dload || tLoad.mode() == Ins.TLoad.Lload)
                                info.push(CodeInfo.Size._2);
                        else info.push(CodeInfo.Size._1);

                        VisitLineNumber(methodVisitor, ((Ins.TLoad) value).line_col(), label);
                } else if (value instanceof StringConstantValue) {
                        methodVisitor.visitLdcInsn(((StringConstantValue) value).getStr());
                        info.push(CodeInfo.Size._1);
                } else if (value instanceof PrimitiveValue) {
                        buildPrimitive(methodVisitor, info, (PrimitiveValue) value);
                } else if (value instanceof Ins.Invoke) {
                        buildInvoke(methodVisitor, info, (Ins.Invoke) value, requireValue);
                } else if (value instanceof Ins.New) {
                        buildNew(methodVisitor, info, (Ins.New) value);
                } else if (value instanceof Ins.Cast) {
                        buildCast(methodVisitor, info, (Ins.Cast) value);
                } else if (value instanceof Ins.TwoVarOp) {
                        buildTwoVarOp(methodVisitor, info, (Ins.TwoVarOp) value);
                } else if (value instanceof ValuePack) {
                        buildValuePack(methodVisitor, info, (ValuePack) value, requireValue);
                } else if (value instanceof Ins.GetField) {
                        buildGetField(methodVisitor, info, (Ins.GetField) value);
                } else if (value instanceof Ins.LogicAnd) {
                        buildLogicAnd(methodVisitor, info, (Ins.LogicAnd) value);
                } else if (value instanceof Ins.LogicOr) {
                        buildLogicOr(methodVisitor, info, (Ins.LogicOr) value);
                } else if (value instanceof Ins.GetClass) {
                        STypeDef targetType = ((Ins.GetClass) value).targetType();

                        if (targetType.equals(VoidType.get())) {
                                methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/Void", "TYPE", "Ljava/lang/Class;");
                        } else if (targetType instanceof PrimitiveTypeDef) {
                                String TYPE = "TYPE";
                                String CLASS = "Ljava/lang/Class;";
                                String OWNER;

                                if (targetType.equals(IntTypeDef.get())) {
                                        OWNER = "java/lang/Integer";
                                } else if (targetType.equals(ShortTypeDef.get())) {
                                        OWNER = "java/lang/Short";
                                } else if (targetType.equals(ByteTypeDef.get())) {
                                        OWNER = "java/lang/Byte";
                                } else if (targetType.equals(BoolTypeDef.get())) {
                                        OWNER = "java/lang/Boolean";
                                } else if (targetType.equals(CharTypeDef.get())) {
                                        OWNER = "java/lang/Character";
                                } else if (targetType.equals(LongTypeDef.get())) {
                                        OWNER = "java/lang/Long";
                                } else if (targetType.equals(FloatTypeDef.get())) {
                                        OWNER = "java/lang/Float";
                                } else if (targetType.equals(DoubleTypeDef.get())) {
                                        OWNER = "java/lang/Double";
                                } else throw new LtBug("unknown primitive type " + targetType);

                                methodVisitor.visitFieldInsn(Opcodes.GETSTATIC, OWNER, TYPE, CLASS);
                        } else {
                                methodVisitor.visitLdcInsn(Type.getObjectType(
                                        typeToInternalName(targetType)
                                ));
                        }
                        info.push(CodeInfo.Size._1);
                } else if (value instanceof Ins.TALoad) {
                        buildTALoad(methodVisitor, info, (Ins.TALoad) value);
                } else if (value instanceof NullValue) {
                        methodVisitor.visitInsn(Opcodes.ACONST_NULL);
                        info.push(CodeInfo.Size._1);
                } else if (value instanceof Ins.ArrayLength) {
                        buildValueAccess(methodVisitor, info, ((Ins.ArrayLength) value).arrayValue(), true);
                        methodVisitor.visitInsn(Opcodes.ARRAYLENGTH);
                        // pop 1 and push 1
                } else if (value instanceof Ins.OneVarOp) {
                        buildOneVarOp(methodVisitor, info, (Ins.OneVarOp) value);
                } else if (value instanceof Ins.NewArray) {
                        buildNewArray(methodVisitor, info, (Ins.NewArray) value);
                } else if (value instanceof Ins.ANewArray) {
                        buildANewArray(methodVisitor, info, (Ins.ANewArray) value);
                } else if (value instanceof Ins.NewList) {
                        buildNewList(methodVisitor, info, (Ins.NewList) value);
                } else if (value instanceof Ins.NewMap) {
                        buildNewMap(methodVisitor, info, (Ins.NewMap) value);
                } else if (value instanceof Ins.CheckCast) {
                        buildValueAccess(methodVisitor, info, ((Ins.CheckCast) value).theValueToCheck(), true);

                        Label label = new Label();
                        methodVisitor.visitLabel(label);

                        methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, typeToInternalName(value.type()));
                        info.pop(1);
                        info.push(CodeInfo.Size._1);

                        VisitLineNumber(methodVisitor, ((Ins.CheckCast) value).line_col(), label);

                } else if (value instanceof Ins.InstanceOf) {
                        buildValueAccess(methodVisitor, info, ((Ins.InstanceOf) value).object(), true);
                        methodVisitor.visitTypeInsn(Opcodes.INSTANCEOF,
                                typeToInternalName(((Ins.InstanceOf) value).aClass().targetType()));
                        info.pop(1);
                        info.push(CodeInfo.Size._1);
                } else if (value instanceof ValueAnotherType) {
                        buildValueAccess(methodVisitor, info, ((ValueAnotherType) value).value(), requireValue);
                } else if (value instanceof Ins.PointerGetCastHelper) {
                        buildPointerCastHelper(methodVisitor, info, (Ins.PointerGetCastHelper) value, requireValue);
                } else {
                        throw new LtBug("unknown value " + value);
                }
        }

        private void buildPointerCastHelper(MethodVisitor methodVisitor, CodeInfo info, Ins.PointerGetCastHelper h, boolean requireValue) {
                if (!requireValue) {
                        // ignore the invocation if not requiring a value
                        return;
                }

                if (canOptimizePointerRetrieving(h.before(), info)) {
                        buildValueAccess(methodVisitor, info, h.before(), true);
                } else {
                        buildValueAccess(methodVisitor, info, h.after(), true);
                }
        }

        /**
         * build Primitive.
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param p             primitive value
         * @see PrimitiveValue
         * @see IntValue
         * @see ShortValue
         * @see ByteValue
         * @see BoolValue
         * @see CharValue
         * @see LongValue
         * @see FloatValue
         * @see DoubleValue
         */
        private void buildPrimitive(MethodVisitor methodVisitor, CodeInfo info, PrimitiveValue p) {
                if (p instanceof IntValue) {
                        methodVisitor.visitLdcInsn(((IntValue) p).getValue());
                        info.push(CodeInfo.Size._1);
                } else if (p instanceof ShortValue) {
                        methodVisitor.visitLdcInsn(((ShortValue) p).getValue());
                        info.push(CodeInfo.Size._1);
                } else if (p instanceof ByteValue) {
                        methodVisitor.visitLdcInsn(((ByteValue) p).getValue());
                        info.push(CodeInfo.Size._1);
                } else if (p instanceof BoolValue) {
                        methodVisitor.visitLdcInsn(((BoolValue) p).getValue());
                        info.push(CodeInfo.Size._1);
                } else if (p instanceof CharValue) {
                        methodVisitor.visitLdcInsn(((CharValue) p).getValue());
                        info.push(CodeInfo.Size._1);
                } else if (p instanceof LongValue) {
                        methodVisitor.visitLdcInsn(((LongValue) p).getValue());
                        info.push(CodeInfo.Size._2);
                } else if (p instanceof FloatValue) {
                        methodVisitor.visitLdcInsn(((FloatValue) p).getValue());
                        info.push(CodeInfo.Size._1);
                } else if (p instanceof DoubleValue) {
                        methodVisitor.visitLdcInsn(((DoubleValue) p).getValue());
                        info.push(CodeInfo.Size._2);
                } else throw new LtBug("unknown primitive value " + p);
        }

        /**
         * build unit if invokable return a void type
         *
         * @param invokable the invokable object
         * @param info      code info
         */
        private void buildUnitWhenInvokeVoid(SInvokable invokable, CodeInfo info) {
                if (!invokable.getReturnType().equals(VoidType.get())) {
                        STypeDef typeDef = invokable.getReturnType();
                        if (typeDef.equals(DoubleTypeDef.get()) || typeDef.equals(LongTypeDef.get()))
                                info.push(CodeInfo.Size._2);
                        else info.push(CodeInfo.Size._1);
                }
        }

        private void _buildOptimizedPointerTLoad(MethodVisitor methodVisitor, CodeInfo info, int index, STypeDef type) {
                if (type instanceof PrimitiveTypeDef) {
                        if (type.equals(DoubleTypeDef.get())) {
                                methodVisitor.visitVarInsn(Opcodes.DLOAD, index);
                                info.push(CodeInfo.Size._2);
                        } else if (type.equals(LongTypeDef.get())) {
                                methodVisitor.visitVarInsn(Opcodes.LLOAD, index);
                                info.push(CodeInfo.Size._2);
                        } else if (type.equals(FloatTypeDef.get())) {
                                methodVisitor.visitVarInsn(Opcodes.FLOAD, index);
                                info.push(CodeInfo.Size._1);
                        } else {
                                methodVisitor.visitVarInsn(Opcodes.ILOAD, index);
                                info.push(CodeInfo.Size._1);
                        }
                } else {
                        methodVisitor.visitVarInsn(Opcodes.ALOAD, index);
                        info.push(CodeInfo.Size._1);
                }
        }

        private void _buildUnbox(MethodVisitor methodVisitor, CodeInfo info, Value v) {
                if (v.type() instanceof PrimitiveTypeDef) {
                        buildValueAccess(methodVisitor, info, v, true);
                } else if (v instanceof Ins.InvokeStatic && ((Ins.InvokeStatic) v).invokable() instanceof SMethodDef &&
                        ((SMethodDef) ((Ins.InvokeStatic) v).invokable()).name().equals("valueOf") &&
                        Arrays.asList(
                                "java.lang.Double",
                                "java.lang.Long",
                                "java.lang.Float",
                                "java.lang.Integer",
                                "java.lang.Short",
                                "java.lang.Byte",
                                "java.lang.Character",
                                "java.lang.Boolean"
                        ).contains(((Ins.InvokeStatic) v).invokable().declaringType().fullName())) {

                        Value primitiveValue = ((Ins.InvokeStatic) v).arguments().get(0);
                        buildValueAccess(methodVisitor, info, primitiveValue, true);
                } else {
                        buildValueAccess(methodVisitor, info, v, true);
                        if (v.type().fullName().equals("java.lang.Double")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Double", "doubleValue", "()D", false);
                                info.push(CodeInfo.Size._2);
                        } else if (v.type().fullName().equals("java.lang.Long")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Long", "longValue", "()J", false);
                                info.push(CodeInfo.Size._2);
                        } else if (v.type().fullName().equals("java.lang.Float")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Float", "floatValue", "()F", false);
                                info.push(CodeInfo.Size._1);
                        } else if (v.type().fullName().equals("java.lang.Integer")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Integer", "intValue", "()I", false);
                                info.push(CodeInfo.Size._1);
                        } else if (v.type().fullName().equals("java.lang.Short")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Short", "shortValue", "()S", false);
                                info.push(CodeInfo.Size._1);
                        } else if (v.type().fullName().equals("java.lang.Byte")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Byte", "byteValue", "()B", false);
                                info.push(CodeInfo.Size._1);
                        } else if (v.type().fullName().equals("java.lang.Character")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Character", "charValue", "()C", false);
                                info.push(CodeInfo.Size._1);
                        } else if (v.type().fullName().equals("java.lang.Boolean")) {
                                methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                                        "java/lang/Boolean", "booleanValue", "()Z", false);
                                info.push(CodeInfo.Size._1);
                        } else {
                                throw new LtBug("unknown boxing type " + v.type());
                        }
                }
        }

        private void _buildOptimizedPointerTStore(MethodVisitor methodVisitor, CodeInfo info, int index, STypeDef type, Value v) {
                if (type instanceof PrimitiveTypeDef) {
                        _buildUnbox(methodVisitor, info, v);
                        if (type.equals(DoubleTypeDef.get())) {
                                methodVisitor.visitVarInsn(Opcodes.DSTORE, index);
                        } else if (type.equals(LongTypeDef.get())) {
                                methodVisitor.visitVarInsn(Opcodes.LSTORE, index);
                        } else if (type.equals(FloatTypeDef.get())) {
                                methodVisitor.visitVarInsn(Opcodes.FSTORE, index);
                        } else {
                                methodVisitor.visitVarInsn(Opcodes.ISTORE, index);
                        }
                        info.pop(1);
                } else {
                        buildValueAccess(methodVisitor, info, v, true);
                        methodVisitor.visitVarInsn(Opcodes.ASTORE, index);
                        info.pop(1);
                }
        }

        private boolean canOptimizePointerRetrieving(Ins.InvokeVirtual invoke, CodeInfo info) {
                Ins.TLoad target = (Ins.TLoad) invoke.target();
                return !info.getMeta().pointerLocalVar.contains(target.value()) && target.type().fullName().equals(Pointer.class.getName());
        }

        private boolean isParameterWrappingPointer(LeftValue v) {
                return LocalVariables.isParameterWrappingPointer(v);
        }

        /**
         * build invoke.
         *
         * @param methodVisitor method visitor
         * @param info          info
         * @param invoke        Ins.Invoke
         * @param requireValue  requires a value
         * @see lt.compiler.semantic.Ins.Invoke
         * @see lt.compiler.semantic.Ins.InvokeSpecial
         * @see lt.compiler.semantic.Ins.InvokeVirtual
         * @see lt.compiler.semantic.Ins.InvokeStatic
         * @see lt.compiler.semantic.Ins.InvokeInterface
         */
        private void buildInvoke(MethodVisitor methodVisitor, CodeInfo info, Ins.Invoke invoke, boolean requireValue) {
                Label label = new Label();
                if (invoke instanceof Ins.InvokeSpecial) {
                        // push target object
                        buildValueAccess(methodVisitor, info, ((Ins.InvokeSpecial) invoke).target(), true);

                        // push parameters
                        for (Value v : invoke.arguments()) {
                                buildValueAccess(methodVisitor, info, v, true);
                        }

                        // invoke special
                        Ins.InvokeSpecial invokeSpecial = (Ins.InvokeSpecial) invoke;
                        SInvokable invokable = invokeSpecial.invokable();

                        String name;
                        String desc;
                        if (invokable instanceof SMethodDef) {
                                name = ((SMethodDef) invokable).name();
                                desc = methodDescWithParameters(
                                        invokable.getReturnType(),
                                        invokable.getParameters());
                        } else if (invokable instanceof SConstructorDef) {
                                name = "<init>";
                                desc = methodDescWithParameters(VoidType.get(), invokable.getParameters());
                        } else throw new LtBug("cannot invoke special on " + invokable);

                        String owner = typeToInternalName(invokable.declaringType());

                        methodVisitor.visitLabel(label);

                        methodVisitor.visitMethodInsn(
                                Opcodes.INVOKESPECIAL,
                                owner,
                                name, desc, false);
                        info.pop(1 + invoke.arguments().size());
                        buildUnitWhenInvokeVoid(invokable, info);

                } else if (invoke instanceof Ins.InvokeVirtual) {
                        if (Consts.flagMatch(((Ins.InvokeVirtual) invoke).flag, Consts.IS_POINTER_GET)) {
                                // pointer get
                                if (!requireValue) {
                                        return;
                                }
                                if (canOptimizePointerRetrieving((Ins.InvokeVirtual) invoke, info)) {
                                        Ins.TLoad target = (Ins.TLoad) ((Ins.InvokeVirtual) invoke).target();
                                        int index;
                                        if (isParameterWrappingPointer(target.value())) {
                                                index = calculateIndexForLocalVariable(((LocalVariable) target.value()).getWrappingParam(), target.getScope(), info);
                                        } else {
                                                index = calculateIndexForLocalVariable(target.value(), target.getScope(), info);
                                        }
                                        // simplify to tLoad
                                        _buildOptimizedPointerTLoad(methodVisitor, info, index, ((PointerType) target.type()).getPointingType());
                                        return;
                                }
                        } else if (Consts.flagMatch(((Ins.InvokeVirtual) invoke).flag, Consts.IS_POINTER_SET)) {
                                // pointer set

                                if (((Ins.InvokeVirtual) invoke).target() instanceof Ins.TLoad) {
                                        Ins.TLoad target = (Ins.TLoad) ((Ins.InvokeVirtual) invoke).target();
                                        if (!info.getMeta().pointerLocalVar.contains(target.value()) && target.type().fullName().equals(Pointer.class.getName())) {
                                                // simplify to tStore
                                                int index;
                                                if (isParameterWrappingPointer(target.value())) {
                                                        index = calculateIndexForLocalVariable(((LocalVariable) target.value()).getWrappingParam(), target.getScope(), info);
                                                } else {
                                                        index = calculateIndexForLocalVariable(target.value(), target.getScope(), info);
                                                }
                                                _buildOptimizedPointerTStore(methodVisitor, info, index, ((PointerType) target.type()).getPointingType(), invoke.arguments().get(0));
                                                return;
                                        }
                                } else {
                                        // else it should be New
                                        assert ((Ins.InvokeVirtual) invoke).target() instanceof Ins.New;
                                }
                        }

                        // push target object
                        buildValueAccess(methodVisitor, info, ((Ins.InvokeVirtual) invoke).target(), true);

                        // push parameters
                        for (Value v : invoke.arguments()) {
                                buildValueAccess(methodVisitor, info, v, true);
                        }

                        // invoke special
                        Ins.InvokeVirtual invokeSpecial = (Ins.InvokeVirtual) invoke;
                        SInvokable invokable = invokeSpecial.invokable();

                        String name;
                        String desc;
                        if (invokable instanceof SMethodDef) {
                                name = ((SMethodDef) invokable).name();
                                desc = methodDescWithParameters(
                                        invokable.getReturnType(),
                                        invokable.getParameters());
                        } else throw new LtBug("cannot invoke virtual on " + invokable);

                        String owner = typeToInternalName(invokable.declaringType());

                        methodVisitor.visitLabel(label);

                        methodVisitor.visitMethodInsn(
                                Opcodes.INVOKEVIRTUAL,
                                owner,
                                name, desc, false);
                        info.pop(1 + invoke.arguments().size());
                        buildUnitWhenInvokeVoid(invokable, info);

                } else if (invoke instanceof Ins.InvokeStatic) {
                        // push parameters
                        for (Value v : invoke.arguments()) {
                                buildValueAccess(methodVisitor, info, v, true);
                        }

                        // invoke special
                        Ins.InvokeStatic invokeStatic = (Ins.InvokeStatic) invoke;
                        SInvokable invokable = invokeStatic.invokable();

                        String name;
                        String desc;
                        if (invokable instanceof SMethodDef) {
                                name = ((SMethodDef) invokable).name();
                                desc = methodDescWithParameters(
                                        invokable.getReturnType(),
                                        invokable.getParameters());
                        } else throw new LtBug("cannot invoke static on " + invokable);

                        String owner = typeToInternalName(invokable.declaringType());

                        methodVisitor.visitLabel(label);

                        methodVisitor.visitMethodInsn(
                                Opcodes.INVOKESTATIC,
                                owner,
                                name, desc, false);
                        info.pop(invoke.arguments().size());
                        buildUnitWhenInvokeVoid(invokable, info);

                } else if (invoke instanceof Ins.InvokeInterface) {
                        // push target object
                        buildValueAccess(methodVisitor, info, ((Ins.InvokeInterface) invoke).target(), true);

                        // push parameters
                        for (Value v : invoke.arguments()) {
                                buildValueAccess(methodVisitor, info, v, true);
                        }

                        // invoke interface
                        Ins.InvokeInterface invokeInterface = (Ins.InvokeInterface) invoke;
                        SInvokable invokable = invokeInterface.invokable();

                        String name;
                        String desc;
                        if (invokable instanceof SMethodDef) {
                                name = ((SMethodDef) invokable).name();
                                desc = methodDescWithParameters(
                                        invokable.getReturnType(),
                                        invokable.getParameters());
                        } else throw new LtBug("cannot invoke interface on " + invokable);

                        String owner = typeToInternalName(invokable.declaringType());

                        methodVisitor.visitLabel(label);

                        methodVisitor.visitMethodInsn(
                                Opcodes.INVOKEINTERFACE,
                                owner,
                                name, desc, true);
                        info.pop(1 + invoke.arguments().size());
                        buildUnitWhenInvokeVoid(invokable, info);

                } else if (invoke instanceof Ins.InvokeWithCapture) {
                        Ins.InvokeWithCapture ic = (Ins.InvokeWithCapture) invoke;
                        // push target object if not static
                        if (!ic.isStatic()) {
                                buildValueAccess(methodVisitor, info, ic.target(), true);
                        }
                        int argCount = 0;
                        // push captured args
                        for (int i = 0; i < ic.capturedArguments().size(); ++i) {
                                Value v = ic.capturedArguments().get(i);
                                SParameter param = ic.invokable().getParameters().get(i);
                                if (param.isCapture() && !param.isUsed()) {
                                        // ignore captured but not used values
                                        continue;
                                }
                                buildValueAccess(methodVisitor, info, v, true);
                                ++argCount;
                        }
                        // push args
                        for (Value v : ic.arguments()) {
                                buildValueAccess(methodVisitor, info, v, true);
                                ++argCount;
                        }
                        // invoke
                        SInvokable invokable = ic.invokable();
                        if (!(invokable instanceof SMethodDef)) {
                                throw new LtBug("invokable in InvokeWithCapture should not be " + invokable);
                        }
                        String name;
                        String desc;
                        name = ((SMethodDef) invokable).name();
                        desc = methodDescWithParameters(
                                invokable.getReturnType(),
                                invokable.getParameters()
                        );
                        String owner = typeToInternalName(invokable.declaringType());
                        methodVisitor.visitLabel(label);
                        if (ic.isStatic()) {
                                // invoke static
                                methodVisitor.visitMethodInsn(
                                        Opcodes.INVOKESTATIC,
                                        owner,
                                        name, desc, false
                                );
                                info.pop(argCount);
                        } else if (invokable.modifiers().isEmpty()) {
                                // invoke virtual (package access)
                                methodVisitor.visitMethodInsn(
                                        Opcodes.INVOKEVIRTUAL,
                                        owner,
                                        name, desc, false
                                );
                                info.pop(argCount + 1);
                        } else {
                                // invoke special
                                methodVisitor.visitMethodInsn(
                                        Opcodes.INVOKESPECIAL,
                                        owner,
                                        name, desc, false
                                );
                                info.pop(argCount + 1);
                        }
                        buildUnitWhenInvokeVoid(invokable, info);

                } else throw new LtBug("unknown invoke type " + invoke);

                // line number
                VisitLineNumber(methodVisitor, invoke.line_col(), label);

                if (invoke.invokable().getReturnType().equals(VoidType.get()) && requireValue) {
                        // void methods
                        // push Unit into stack
                        methodVisitor.visitMethodInsn(
                                Opcodes.INVOKESTATIC,
                                "lt/lang/Unit",
                                "get",
                                "()Llt/lang/Unit;",
                                false);
                        info.push(CodeInfo.Size._1);
                }
        }

        /**
         * build Return.<br>
         * <br>
         * <code>
         * RETURN<br>
         * or<br>
         * buildValueAccess ---- the value to return<br>
         * TReturn
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          info
         * @param tReturn       Ins.TReturn
         */
        private void buildReturn(MethodVisitor methodVisitor, CodeInfo info, Ins.TReturn tReturn) {
                if (tReturn.returnIns() == Ins.TReturn.Return) {
                        methodVisitor.visitInsn(Opcodes.RETURN);
                } else {
                        buildValueAccess(methodVisitor, info, tReturn.value(), true);
                        methodVisitor.visitInsn(tReturn.returnIns());
                        info.pop(1);
                }
        }

        /**
         * build TStore.<br>
         * <br>
         * <code>
         * buildValueAccess ---- the value to store<br>
         * TStore index
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param tStore        Ins.TStore
         */
        private void buildTStore(MethodVisitor methodVisitor, CodeInfo info, Ins.TStore tStore) {
                if (tStore.flag == Consts.IS_POINTER_NEW) {
                        if (!info.getMeta().pointerLocalVar.contains(tStore.leftValue())) {
                                STypeDef pointerType = tStore.leftValue().type();
                                STypeDef type = ((PointerType) pointerType).getPointingType();
                                if (isParameterWrappingPointer(tStore.leftValue())) {
                                        // ignore the value
                                        return;
                                }
                                int index = calculateIndexForLocalVariable(tStore.leftValue(), tStore.getScope(), info);
                                Value newValue = tStore.newValue();
                                if (newValue instanceof Ins.New && newValue.type().fullName().equals(Pointer.class.getName())) {
                                        // constructing a new pointer object but not assigning any value
                                        return; // do nothing
                                } else if (newValue instanceof Ins.InvokeVirtual) {
                                        //                                        pointer.set(           ?            )
                                        Value valueToBuild = ((Ins.InvokeVirtual) tStore.newValue()).arguments().get(0);
                                        if (type instanceof PrimitiveTypeDef) {
                                                _buildUnbox(methodVisitor, info, valueToBuild);
                                                if (type instanceof DoubleTypeDef) {
                                                        methodVisitor.visitVarInsn(Opcodes.DSTORE, index);
                                                } else if (type instanceof LongTypeDef) {
                                                        methodVisitor.visitVarInsn(Opcodes.LSTORE, index);
                                                } else if (type instanceof FloatTypeDef) {
                                                        methodVisitor.visitVarInsn(Opcodes.FSTORE, index);
                                                } else {
                                                        methodVisitor.visitVarInsn(Opcodes.ISTORE, index);
                                                }
                                        } else {
                                                buildValueAccess(methodVisitor, info, valueToBuild, true);
                                                methodVisitor.visitVarInsn(Opcodes.ASTORE, index);
                                        }
                                        info.pop(1);
                                        info.registerLocal(index);
                                        return;
                                } else throw new LtBug("should not each here");
                        }
                }

                buildValueAccess(methodVisitor, info, tStore.newValue(), true);
                int index = calculateIndexForLocalVariable(tStore.leftValue(), tStore.getScope(), info);
                methodVisitor.visitVarInsn(tStore.mode(), index);
                info.pop(1);
                info.registerLocal(index);
        }

        /**
         * build PutField.<br>
         * <br>
         * <code>
         * buildValueAccess ---- the instance<br>
         * buildValueAccess ---- the value to be put<br>
         * PutField Field
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param putField      Ins.PutField
         */
        private void buildPutField(MethodVisitor methodVisitor, CodeInfo info, Ins.PutField putField) {
                buildValueAccess(methodVisitor, info, putField.obj(), true);
                buildValueAccess(methodVisitor, info, putField.value(), true);
                methodVisitor.visitFieldInsn(
                        Opcodes.PUTFIELD,
                        typeToInternalName(putField.field().declaringType()),
                        putField.field().name(),
                        typeToDesc(putField.field().type()));
                info.pop(2);
        }

        /**
         * build GetField.<br>
         * <br>
         * <code>
         * buildValueAccess ---- the instance<br>
         * GetField Field
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param getField      Ins.GetField
         */
        private void buildGetField(MethodVisitor methodVisitor, CodeInfo info, Ins.GetField getField) {
                buildValueAccess(methodVisitor, info, getField.object(), true);

                Label label = new Label();
                methodVisitor.visitLabel(label);

                methodVisitor.visitFieldInsn(
                        Opcodes.GETFIELD,
                        typeToInternalName(getField.field().declaringType()),
                        getField.field().name(),
                        typeToDesc(getField.type()));
                info.pop(1);

                if (getField.field().type().equals(DoubleTypeDef.get())
                        ||
                        getField.field().type().equals(LongTypeDef.get())) {
                        info.push(CodeInfo.Size._2);
                } else info.push(CodeInfo.Size._1);

                VisitLineNumber(methodVisitor, getField.line_col(), label);
        }

        /**
         * build PutStatic.<br>
         * <br>
         * <code>
         * buildValueAccess ---- the value to be put<br>
         * PutStatic Field
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param putStatic     Ins.PutStatic
         */
        private void buildPutStatic(MethodVisitor methodVisitor, CodeInfo info, Ins.PutStatic putStatic) {
                buildValueAccess(methodVisitor, info, putStatic.value(), true);
                methodVisitor.visitFieldInsn(
                        Opcodes.PUTSTATIC,
                        typeToInternalName(putStatic.field().declaringType()),
                        putStatic.field().name(),
                        typeToDesc(putStatic.field().type()));
                info.pop(1);
        }

        /**
         * build TAStore.<br>
         * <br>
         * <code>
         * buildValueAccess ---- array<br>
         * buildValueAccess ---- index to store<br>
         * buildValueAccess ---- the value to store<br>
         * TAStore
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param TAStore       Ins.TAStore
         */
        private void buildTAStore(MethodVisitor methodVisitor, CodeInfo info, Ins.TAStore TAStore) {
                buildValueAccess(methodVisitor, info, TAStore.array(), true); // array
                buildValueAccess(methodVisitor, info, TAStore.index(), true); // index
                buildValueAccess(methodVisitor, info, TAStore.value(), true); // value

                methodVisitor.visitInsn(TAStore.mode());
                info.pop(3);
        }

        /**
         * build MonitorEnter.<br>
         * <br>
         * <code>
         * buildValueAccess ---- the object to be monitored<br>
         * DUP<br>
         * AStore index<br>
         * MonitorEnter
         * </code>
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param monitorEnter  Ins.MonitorEnter
         */
        private void buildMonitorEnter(MethodVisitor methodVisitor, CodeInfo info, Ins.MonitorEnter monitorEnter) {
                buildValueAccess(methodVisitor, info, monitorEnter.valueToMonitor(), true);
                methodVisitor.visitInsn(Opcodes.DUP);
                info.push(CodeInfo.Size._1);
                methodVisitor.visitVarInsn(Opcodes.ASTORE, calculateIndexForLocalVariable(monitorEnter.leftValue(), monitorEnter.getScope(), info));
                info.pop(1);
                methodVisitor.visitInsn(Opcodes.MONITORENTER);
                info.pop(1);
        }

        /**
         * build MonitorExit.<br>
         * <br>
         * ALoad ---- the object that was monitored<br>
         * MonitorExit
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param monitorExit   Ins.MonitorExit
         */
        private void buildMonitorExit(MethodVisitor methodVisitor, CodeInfo info, Ins.MonitorExit monitorExit) {
                methodVisitor.visitVarInsn(Opcodes.ALOAD, calculateIndexForLocalVariable(monitorExit.enterInstruction().leftValue(), monitorExit.enterInstruction().getScope(), info));
                info.push(CodeInfo.Size._1);
                methodVisitor.visitInsn(Opcodes.MONITOREXIT);
                info.pop(1);
        }

        /**
         * build one Instruction.
         *
         * @param methodVisitor method visitor
         * @param info          method info
         * @param ins           Instruction
         * @param requireValue  requires a value when generating {@link ValuePack}
         * @see Instruction
         * @see Value
         * @see lt.compiler.semantic.Ins.TReturn
         * @see lt.compiler.semantic.Ins.TStore
         * @see lt.compiler.semantic.Ins.PutField
         * @see lt.compiler.semantic.Ins.PutStatic
         * @see lt.compiler.semantic.Ins.IfNe
         * @see lt.compiler.semantic.Ins.IfEq
         * @see lt.compiler.semantic.Ins.IfNonNull
         * @see lt.compiler.semantic.Ins.IfACmpNe
         * @see lt.compiler.semantic.Ins.Goto
         * @see lt.compiler.semantic.Ins.Nop
         * @see lt.compiler.semantic.Ins.AThrow
         * @see lt.compiler.semantic.Ins.ExStore
         * @see lt.compiler.semantic.Ins.Pop
         * @see lt.compiler.semantic.Ins.TAStore
         * @see lt.compiler.semantic.Ins.MonitorEnter
         * @see lt.compiler.semantic.Ins.MonitorExit
         */
        private void buildOneIns(MethodVisitor methodVisitor, CodeInfo info, Instruction ins, boolean requireValue) {
                CodeInfo.Container container;
                if (info.insToLabel.containsKey(ins)) {
                        // fill label
                        container = info.insToLabel.get(ins);
                } else {
                        // add label
                        container = new CodeInfo.Container(new Label());
                        info.insToLabel.put(ins, container);
                }
                if (!container.isVisited) {
                        methodVisitor.visitLabel(container.label);
                        container.isVisited = true;
                }

                if (ins instanceof Value) {
                        buildValueAccess(methodVisitor, info, (Value) ins, requireValue);
                } else if (ins instanceof Ins.TReturn) {
                        buildReturn(methodVisitor, info, (Ins.TReturn) ins);
                } else if (ins instanceof Ins.TStore) {
                        buildTStore(methodVisitor, info, (Ins.TStore) ins);
                } else if (ins instanceof Ins.PutField) {
                        buildPutField(methodVisitor, info, (Ins.PutField) ins);
                } else if (ins instanceof Ins.PutStatic) {
                        buildPutStatic(methodVisitor, info, (Ins.PutStatic) ins);
                } else if (ins instanceof Ins.IfNe) {
                        buildValueAccess(methodVisitor, info, ((Ins.IfNe) ins).condition(), true);
                        Label l;
                        if (info.insToLabel.containsKey(((Ins.IfNe) ins).gotoIns())) {
                                l = info.insToLabel.get(((Ins.IfNe) ins).gotoIns()).label;
                        } else {
                                l = new Label();
                                info.insToLabel.put(((Ins.IfNe) ins).gotoIns(), new CodeInfo.Container(l));
                        }
                        methodVisitor.visitJumpInsn(Opcodes.IFNE, l);
                        info.pop(1);
                } else if (ins instanceof Ins.IfEq) {
                        buildValueAccess(methodVisitor, info, ((Ins.IfEq) ins).condition(), true);
                        Label l;
                        if (info.insToLabel.containsKey(((Ins.IfEq) ins).gotoIns())) {
                                l = info.insToLabel.get(((Ins.IfEq) ins).gotoIns()).label;
                        } else {
                                l = new Label();
                                info.insToLabel.put(((Ins.IfEq) ins).gotoIns(), new CodeInfo.Container(l));
                        }
                        methodVisitor.visitJumpInsn(Opcodes.IFEQ, l);
                        info.pop(1);
                } else if (ins instanceof Ins.IfNonNull) {
                        buildValueAccess(methodVisitor, info, ((Ins.IfNonNull) ins).object(), true);
                        Label l;
                        if (info.insToLabel.containsKey(((Ins.IfNonNull) ins).gotoIns())) {
                                l = info.insToLabel.get(((Ins.IfNonNull) ins).gotoIns()).label;
                        } else {
                                l = new Label();
                                info.insToLabel.put(((Ins.IfNonNull) ins).gotoIns(), new CodeInfo.Container(l));
                        }
                        methodVisitor.visitJumpInsn(Opcodes.IFNONNULL, l);
                        info.pop(1);
                } else if (ins instanceof Ins.IfNull) {
                        buildValueAccess(methodVisitor, info, ((Ins.IfNull) ins).object(), true);
                        Label l;
                        if (info.insToLabel.containsKey(((Ins.IfNull) ins).gotoIns())) {
                                l = info.insToLabel.get(((Ins.IfNull) ins).gotoIns()).label;
                        } else {
                                l = new Label();
                                info.insToLabel.put(((Ins.IfNull) ins).gotoIns(), new CodeInfo.Container(l));
                        }
                        methodVisitor.visitJumpInsn(Opcodes.IFNULL, l);
                        info.pop(1);
                } else if (ins instanceof Ins.IfACmpNe) {
                        buildValueAccess(methodVisitor, info, ((Ins.IfACmpNe) ins).value1(), true);
                        buildValueAccess(methodVisitor, info, ((Ins.IfACmpNe) ins).value2(), true);
                        Label l;
                        if (info.insToLabel.containsKey(((Ins.IfACmpNe) ins).gotoIns())) {
                                l = info.insToLabel.get(((Ins.IfACmpNe) ins).gotoIns()).label;
                        } else {
                                l = new Label();
                                info.insToLabel.put(((Ins.IfACmpNe) ins).gotoIns(), new CodeInfo.Container(l));
                        }
                        methodVisitor.visitJumpInsn(Opcodes.IF_ACMPNE, l);
                        info.pop(2);
                } else if (ins instanceof Ins.Goto) {
                        Label l;
                        if (info.insToLabel.containsKey(((Ins.Goto) ins).gotoIns())) {
                                l = info.insToLabel.get(((Ins.Goto) ins).gotoIns()).label;
                        } else {
                                l = new Label();
                                info.insToLabel.put(((Ins.Goto) ins).gotoIns(), new CodeInfo.Container(l));
                        }
                        // methodVisitor.visitLdcInsn(0);
                        // info.push(1);
                        methodVisitor.visitJumpInsn(Opcodes.GOTO, l);
                        // info.pop(1);
                } else if (ins instanceof Ins.Nop) {
                        methodVisitor.visitInsn(Opcodes.NOP);
                } else if (ins instanceof Ins.AThrow) {
                        buildValueAccess(methodVisitor, info, ((Ins.AThrow) ins).exception(), true);

                        Label label = new Label();
                        methodVisitor.visitLabel(label);

                        methodVisitor.visitInsn(Opcodes.ATHROW);
                        info.pop(1);

                        VisitLineNumber(methodVisitor, ins.line_col(), label);

                } else if (ins instanceof Ins.ExStore) {
                        info.push(CodeInfo.Size._1);
                        int index = calculateIndexForLocalVariable(((Ins.ExStore) ins).leftValue(), ((Ins.ExStore) ins).getScope(), info);
                        methodVisitor.visitVarInsn(Opcodes.ASTORE, index);
                        info.registerLocal(index);
                        info.pop(1);
                } else if (ins instanceof Ins.Pop) {
                        methodVisitor.visitIn
Download .txt
gitextract_gohkibfx/

├── .gitignore
├── LICENSE
├── README.md
├── TODO.md
├── build.py
├── latte-build/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── java/
│           │   └── lt/
│           │       └── repl/
│           │           ├── CtrlCHandler.java
│           │           ├── CtrlCHandlerImpl.java
│           │           ├── Entry.java
│           │           ├── IO.java
│           │           ├── JLineStringReader.java
│           │           ├── REPL.java
│           │           ├── SimpleStringReader.java
│           │           ├── StringReader.java
│           │           └── VersionRetriever.java
│           └── resources/
│               └── version
├── latte-class-recorder/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── groovy/
│           │   └── org/
│           │       └── lattelang/
│           │           └── ClassRecorder.groovy
│           └── resources/
│               └── META-INF/
│                   └── gradle-plugins/
│                       └── org.latte-lang.class-recorder.properties
├── latte-compiler/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── lt/
│       │   │       ├── compiler/
│       │   │       │   ├── AbstractScanner.java
│       │   │       │   ├── BraceScanner.java
│       │   │       │   ├── CodeGenerator.java
│       │   │       │   ├── CodeInfo.java
│       │   │       │   ├── CompileException.java
│       │   │       │   ├── CompileUtil.java
│       │   │       │   ├── ErrorManager.java
│       │   │       │   ├── IndentScanner.java
│       │   │       │   ├── LineCol.java
│       │   │       │   ├── LtBug.java
│       │   │       │   ├── MultipleClassLoader.java
│       │   │       │   ├── Parser.java
│       │   │       │   ├── Properties.java
│       │   │       │   ├── PushLineBackReader.java
│       │   │       │   ├── SClassWriter.java
│       │   │       │   ├── Scanner.java
│       │   │       │   ├── ScannerSwitcher.java
│       │   │       │   ├── SemanticProcessor.java
│       │   │       │   ├── SemanticScope.java
│       │   │       │   ├── SyntaxException.java
│       │   │       │   ├── UnexpectedEndException.java
│       │   │       │   ├── UnexpectedTokenException.java
│       │   │       │   ├── lexical/
│       │   │       │   │   ├── Args.java
│       │   │       │   │   ├── Element.java
│       │   │       │   │   ├── ElementStartNode.java
│       │   │       │   │   ├── EndingNode.java
│       │   │       │   │   ├── IllegalIndentationException.java
│       │   │       │   │   ├── Indent.java
│       │   │       │   │   ├── Node.java
│       │   │       │   │   ├── PairEntry.java
│       │   │       │   │   └── TokenType.java
│       │   │       │   ├── semantic/
│       │   │       │   │   ├── ConstantValue.java
│       │   │       │   │   ├── DummyValue.java
│       │   │       │   │   ├── ExceptionTable.java
│       │   │       │   │   ├── Ins.java
│       │   │       │   │   ├── Instruction.java
│       │   │       │   │   ├── InvokableMeta.java
│       │   │       │   │   ├── LeftValue.java
│       │   │       │   │   ├── LocalVariable.java
│       │   │       │   │   ├── MethodTypeValue.java
│       │   │       │   │   ├── PointerType.java
│       │   │       │   │   ├── PrimitiveTypeDef.java
│       │   │       │   │   ├── PrimitiveValue.java
│       │   │       │   │   ├── ReadOnly.java
│       │   │       │   │   ├── SAnno.java
│       │   │       │   │   ├── SAnnoDef.java
│       │   │       │   │   ├── SAnnoField.java
│       │   │       │   │   ├── SAnnotationPresentable.java
│       │   │       │   │   ├── SArrayTypeDef.java
│       │   │       │   │   ├── SArrayValue.java
│       │   │       │   │   ├── SClassDef.java
│       │   │       │   │   ├── SConstructorDef.java
│       │   │       │   │   ├── SFieldDef.java
│       │   │       │   │   ├── SInterfaceDef.java
│       │   │       │   │   ├── SInvokable.java
│       │   │       │   │   ├── SMember.java
│       │   │       │   │   ├── SMethodDef.java
│       │   │       │   │   ├── SModifier.java
│       │   │       │   │   ├── SParameter.java
│       │   │       │   │   ├── SRefTypeDef.java
│       │   │       │   │   ├── STypeDef.java
│       │   │       │   │   ├── Value.java
│       │   │       │   │   ├── ValueAnotherType.java
│       │   │       │   │   ├── ValuePack.java
│       │   │       │   │   ├── VoidType.java
│       │   │       │   │   ├── builtin/
│       │   │       │   │   │   ├── BoolTypeDef.java
│       │   │       │   │   │   ├── BoolValue.java
│       │   │       │   │   │   ├── ByteTypeDef.java
│       │   │       │   │   │   ├── ByteValue.java
│       │   │       │   │   │   ├── CharTypeDef.java
│       │   │       │   │   │   ├── CharValue.java
│       │   │       │   │   │   ├── DoubleTypeDef.java
│       │   │       │   │   │   ├── DoubleValue.java
│       │   │       │   │   │   ├── EnumValue.java
│       │   │       │   │   │   ├── FloatTypeDef.java
│       │   │       │   │   │   ├── FloatValue.java
│       │   │       │   │   │   ├── IntTypeDef.java
│       │   │       │   │   │   ├── IntValue.java
│       │   │       │   │   │   ├── LongTypeDef.java
│       │   │       │   │   │   ├── LongValue.java
│       │   │       │   │   │   ├── NullTypeDef.java
│       │   │       │   │   │   ├── NullValue.java
│       │   │       │   │   │   ├── ShortTypeDef.java
│       │   │       │   │   │   ├── ShortValue.java
│       │   │       │   │   │   └── StringConstantValue.java
│       │   │       │   │   └── helper/
│       │   │       │   │       ├── ASTGHolder.java
│       │   │       │   │       └── HalfAppliedTypes.java
│       │   │       │   ├── syntactic/
│       │   │       │   │   ├── AST.java
│       │   │       │   │   ├── Definition.java
│       │   │       │   │   ├── DuplicateVariableNameException.java
│       │   │       │   │   ├── Expression.java
│       │   │       │   │   ├── Literal.java
│       │   │       │   │   ├── Operation.java
│       │   │       │   │   ├── Pre.java
│       │   │       │   │   ├── Statement.java
│       │   │       │   │   ├── UnexpectedNewLayerException.java
│       │   │       │   │   ├── UnknownTokenException.java
│       │   │       │   │   ├── def/
│       │   │       │   │   │   ├── AnnotationDef.java
│       │   │       │   │   │   ├── ClassDef.java
│       │   │       │   │   │   ├── FunDef.java
│       │   │       │   │   │   ├── InterfaceDef.java
│       │   │       │   │   │   ├── MethodDef.java
│       │   │       │   │   │   ├── ObjectDef.java
│       │   │       │   │   │   └── VariableDef.java
│       │   │       │   │   ├── literal/
│       │   │       │   │   │   ├── BoolLiteral.java
│       │   │       │   │   │   ├── NumberLiteral.java
│       │   │       │   │   │   └── StringLiteral.java
│       │   │       │   │   ├── operation/
│       │   │       │   │   │   ├── OneVariableOperation.java
│       │   │       │   │   │   ├── TwoVariableOperation.java
│       │   │       │   │   │   └── UnaryOneVariableOperation.java
│       │   │       │   │   └── pre/
│       │   │       │   │       ├── Import.java
│       │   │       │   │       ├── Modifier.java
│       │   │       │   │       └── PackageDeclare.java
│       │   │       │   └── util/
│       │   │       │       ├── BindList.java
│       │   │       │       ├── Consts.java
│       │   │       │       └── LocalVariables.java
│       │   │       ├── dependencies/
│       │   │       │   ├── asm/
│       │   │       │   │   ├── AnnotationVisitor.java
│       │   │       │   │   ├── AnnotationWriter.java
│       │   │       │   │   ├── Attribute.java
│       │   │       │   │   ├── ByteVector.java
│       │   │       │   │   ├── ClassReader.java
│       │   │       │   │   ├── ClassVisitor.java
│       │   │       │   │   ├── ClassWriter.java
│       │   │       │   │   ├── Context.java
│       │   │       │   │   ├── Edge.java
│       │   │       │   │   ├── FieldVisitor.java
│       │   │       │   │   ├── FieldWriter.java
│       │   │       │   │   ├── Frame.java
│       │   │       │   │   ├── Handle.java
│       │   │       │   │   ├── Handler.java
│       │   │       │   │   ├── Item.java
│       │   │       │   │   ├── Label.java
│       │   │       │   │   ├── MethodVisitor.java
│       │   │       │   │   ├── MethodWriter.java
│       │   │       │   │   ├── Opcodes.java
│       │   │       │   │   ├── Type.java
│       │   │       │   │   ├── TypePath.java
│       │   │       │   │   ├── TypeReference.java
│       │   │       │   │   ├── package.html
│       │   │       │   │   └── signature/
│       │   │       │   │       ├── SignatureReader.java
│       │   │       │   │       ├── SignatureVisitor.java
│       │   │       │   │       ├── SignatureWriter.java
│       │   │       │   │       └── package.html
│       │   │       │   └── package-info.java
│       │   │       ├── generator/
│       │   │       │   ├── AbstractSourceGenerator.java
│       │   │       │   └── SourceGenerator.java
│       │   │       ├── lang/
│       │   │       │   ├── FunctionalAbstractClass.java
│       │   │       │   ├── FunctionalInterface.java
│       │   │       │   ├── GenericTemplate.java
│       │   │       │   ├── Pointer.java
│       │   │       │   ├── Unit.java
│       │   │       │   ├── ast.java
│       │   │       │   ├── function/
│       │   │       │   │   ├── Function.java
│       │   │       │   │   ├── Function0.java
│       │   │       │   │   ├── Function1.java
│       │   │       │   │   ├── Function10.java
│       │   │       │   │   ├── Function11.java
│       │   │       │   │   ├── Function12.java
│       │   │       │   │   ├── Function13.java
│       │   │       │   │   ├── Function14.java
│       │   │       │   │   ├── Function15.java
│       │   │       │   │   ├── Function16.java
│       │   │       │   │   ├── Function17.java
│       │   │       │   │   ├── Function18.java
│       │   │       │   │   ├── Function19.java
│       │   │       │   │   ├── Function2.java
│       │   │       │   │   ├── Function20.java
│       │   │       │   │   ├── Function21.java
│       │   │       │   │   ├── Function22.java
│       │   │       │   │   ├── Function23.java
│       │   │       │   │   ├── Function24.java
│       │   │       │   │   ├── Function25.java
│       │   │       │   │   ├── Function26.java
│       │   │       │   │   ├── Function3.java
│       │   │       │   │   ├── Function4.java
│       │   │       │   │   ├── Function5.java
│       │   │       │   │   ├── Function6.java
│       │   │       │   │   ├── Function7.java
│       │   │       │   │   ├── Function8.java
│       │   │       │   │   └── Function9.java
│       │   │       │   ├── implicit/
│       │   │       │   │   ├── CollectionImplicit.java
│       │   │       │   │   ├── ObjectImplicit.java
│       │   │       │   │   ├── PrimitivesImplicit.java
│       │   │       │   │   ├── RichBool.java
│       │   │       │   │   ├── RichByte.java
│       │   │       │   │   ├── RichChar.java
│       │   │       │   │   ├── RichDouble.java
│       │   │       │   │   ├── RichFloat.java
│       │   │       │   │   ├── RichInt.java
│       │   │       │   │   ├── RichLong.java
│       │   │       │   │   ├── RichObject.java
│       │   │       │   │   ├── RichShort.java
│       │   │       │   │   ├── RichString.java
│       │   │       │   │   ├── StringImplicit.java
│       │   │       │   │   └── collection/
│       │   │       │   │       ├── RichIterable.java
│       │   │       │   │       ├── RichList.java
│       │   │       │   │       ├── RichMap.java
│       │   │       │   │       └── RichSet.java
│       │   │       │   └── js.java
│       │   │       ├── repl/
│       │   │       │   ├── ClassPathLoader.java
│       │   │       │   ├── Compiler.java
│       │   │       │   ├── Evaluator.java
│       │   │       │   ├── Run.java
│       │   │       │   ├── ScriptCompiler.java
│       │   │       │   └── scripting/
│       │   │       │       ├── CL.java
│       │   │       │       ├── Config.java
│       │   │       │       ├── EvalEntry.java
│       │   │       │       ├── LatteContext.java
│       │   │       │       ├── LatteEngine.java
│       │   │       │       ├── LatteEngineFactory.java
│       │   │       │       ├── LatteScope.java
│       │   │       │       └── package-info.java
│       │   │       ├── runtime/
│       │   │       │   ├── Dynamic.java
│       │   │       │   ├── ExceptionContainer.java
│       │   │       │   ├── Implicit.java
│       │   │       │   ├── ImplicitImports.java
│       │   │       │   ├── LambdaGen.java
│       │   │       │   ├── LatteFun.java
│       │   │       │   ├── LatteObject.java
│       │   │       │   ├── LtIterator.java
│       │   │       │   ├── LtRuntime.java
│       │   │       │   ├── LtRuntimeException.java
│       │   │       │   ├── MatchError.java
│       │   │       │   ├── StaticImports.java
│       │   │       │   └── Wrapper.java
│       │   │       └── util/
│       │   │           ├── RangeList.java
│       │   │           └── Utils.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── services/
│       │       │       └── javax.script.ScriptEngineFactory
│       │       ├── build.lts.template
│       │       └── run.lts.template
│       └── test/
│           ├── java/
│           │   ├── SimpleTest.java
│           │   ├── lt/
│           │   │   ├── LatteObjectOutputStream.java
│           │   │   ├── RepeatRule.java
│           │   │   ├── compiler/
│           │   │   │   ├── AnnoAnno.java
│           │   │   │   ├── AnnotationTest.java
│           │   │   │   ├── F.java
│           │   │   │   ├── MyAnno.java
│           │   │   │   ├── TestAllKindsOfAnnos.java
│           │   │   │   ├── TestLambdaFunc.java
│           │   │   │   ├── cases/
│           │   │   │   │   ├── TestAnnotations.java
│           │   │   │   │   ├── TestBraceScanner.java
│           │   │   │   │   ├── TestCodeGen.java
│           │   │   │   │   ├── TestDefineAnnotations.java
│           │   │   │   │   ├── TestDemo.java
│           │   │   │   │   ├── TestDotPackage.java
│           │   │   │   │   ├── TestLambdaGen.java
│           │   │   │   │   ├── TestLang.java
│           │   │   │   │   ├── TestOptimizePointer.java
│           │   │   │   │   ├── TestParser.java
│           │   │   │   │   ├── TestParserMix.java
│           │   │   │   │   ├── TestPrimitiveOperators.java
│           │   │   │   │   ├── TestScanner.java
│           │   │   │   │   ├── TestScannerLayerControl.java
│           │   │   │   │   ├── TestScannerSwitcher.java
│           │   │   │   │   ├── TestSemantic.java
│           │   │   │   │   ├── TestSynchronized.java
│           │   │   │   │   └── anno/
│           │   │   │   │       ├── TestConstructorAnno.java
│           │   │   │   │       ├── TestFieldAnno.java
│           │   │   │   │       ├── TestMethodAnno.java
│           │   │   │   │       ├── TestParamAnno.java
│           │   │   │   │       └── TestTypeAnno.java
│           │   │   │   ├── err_rec/
│           │   │   │   │   ├── TestParserErrorRecovery.java
│           │   │   │   │   ├── TestScannerErrorRecovery.java
│           │   │   │   │   └── TestSemanticError.java
│           │   │   │   └── functionalInterfaces/
│           │   │   │       ├── BoolParamReturnUnit.java
│           │   │   │       ├── ByteParamReturnUnit.java
│           │   │   │       ├── CharParamReturnUnit.java
│           │   │   │       ├── DoubleParamReturnUnit.java
│           │   │   │       ├── FloatParamReturnUnit.java
│           │   │   │       ├── IntParamReturnInt.java
│           │   │   │       ├── IntParamReturnUnit.java
│           │   │   │       ├── LongParamReturnUnit.java
│           │   │   │       ├── NoParamReturnBool.java
│           │   │   │       ├── NoParamReturnByte.java
│           │   │   │       ├── NoParamReturnChar.java
│           │   │   │       ├── NoParamReturnDouble.java
│           │   │   │       ├── NoParamReturnFloat.java
│           │   │   │       ├── NoParamReturnInt.java
│           │   │   │       ├── NoParamReturnLong.java
│           │   │   │       ├── NoParamReturnShort.java
│           │   │   │       ├── NoParamReturnUnit.java
│           │   │   │       └── ShortParamReturnUnit.java
│           │   │   ├── generator/
│           │   │   │   └── TestJsSupport.java
│           │   │   └── repl/
│           │   │       ├── TestBugsInEval.java
│           │   │       ├── TestEvaluator.java
│           │   │       ├── TestGenericInREPL.java
│           │   │       ├── TestJsr223.java
│           │   │       ├── TestScript.java
│           │   │       └── VariableTest.java
│           │   └── suite/
│           │       └── Suite.java
│           └── resources/
│               ├── lang-demo/
│               │   ├── advanced.lt
│               │   ├── examples/
│               │   │   └── rational.lt
│               │   ├── fun.lt
│               │   ├── list-map.lts
│               │   ├── literals.lts
│               │   ├── ltFileStructure.lt
│               │   ├── operator.lt
│               │   ├── statements.lts
│               │   └── typeDef.lt
│               ├── test_require.lts
│               └── test_require2.lts
├── latte-gradle-plugin/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       └── main/
│           ├── groovy/
│           │   └── org/
│           │       └── lattelang/
│           │           ├── LatteGradlePlugin.groovy
│           │           └── LoaderUtil.java
│           ├── java/
│           │   └── org/
│           │       └── lattelang/
│           │           ├── DefaultLatteSourceSet.java
│           │           └── LatteSourceSet.java
│           └── resources/
│               └── META-INF/
│                   └── gradle-plugins/
│                       └── latte.properties
├── latte-idea-plugin/
│   ├── .gitignore
│   ├── resources/
│   │   └── META-INF/
│   │       └── plugin.xml
│   └── src/
│       └── org/
│           └── lattelang/
│               └── idea/
│                   ├── Consts.java
│                   ├── LatteFileType.java
│                   ├── LatteFileTypeFactory.java
│                   ├── LatteLanguage.java
│                   ├── highlighter/
│                   │   ├── LatteSyntaxHighlighter.java
│                   │   └── LatteSyntaxHighlighterFactory.java
│                   └── psi/
│                       ├── LatteElementType.java
│                       ├── LatteTokenTypes.java
│                       └── latte.flex
├── latte-library/
│   ├── .gitignore
│   ├── build.gradle
│   ├── settings.gradle
│   └── src/
│       ├── main/
│       │   └── latte/
│       │       ├── async/
│       │       │   └── lt/
│       │       │       └── async/
│       │       │           └── async.lt
│       │       └── dsl/
│       │           └── lt/
│       │               └── dsl/
│       │                   └── html.lt
│       └── test/
│           ├── java/
│           │   └── lt/
│           │       └── library/
│           │           └── TestLibraries.java
│           └── latte/
│               ├── test_async.lt
│               └── test_html.lt
└── mannual-zh.md
Download .txt
Showing preview only (287K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3936 symbols across 288 files)

FILE: build.py
  function log (line 24) | def log(s):
  function javaVersion (line 27) | def javaVersion():
  function gradleVersion (line 45) | def gradleVersion():
  function compareVersionLt (line 61) | def compareVersionLt(a, b):
  function check (line 77) | def check():
  function execute (line 104) | def execute(cmd):
  function buildModule (line 116) | def buildModule(module):
  function build (line 120) | def build():
  function unixLink (line 126) | def unixLink(script):
  function scripts (line 139) | def scripts():
  function performModule (line 162) | def performModule(module):
  function perform (line 166) | def perform():
  function start (line 172) | def start():
  function assertNotLast (line 199) | def assertNotLast(argv, i):
  function extractArgs (line 204) | def extractArgs():

FILE: latte-build/src/main/java/lt/repl/CtrlCHandler.java
  type CtrlCHandler (line 6) | public interface CtrlCHandler {
    type ExitCallback (line 7) | interface ExitCallback {
      method exit (line 8) | void exit();
    method setExitCallback (line 11) | void setExitCallback(ExitCallback exitCallback);
    method setAlert (line 13) | void setAlert(Runnable alert);
    method handle (line 15) | void handle();

FILE: latte-build/src/main/java/lt/repl/CtrlCHandlerImpl.java
  class CtrlCHandlerImpl (line 9) | public class CtrlCHandlerImpl implements CtrlCHandler {
    method CtrlCHandlerImpl (line 15) | public CtrlCHandlerImpl(IO io) {
    method setExitCallback (line 19) | @Override
    method setAlert (line 24) | @Override
    method handle (line 29) | @Override

FILE: latte-build/src/main/java/lt/repl/Entry.java
  class Entry (line 14) | public class Entry {
    method main (line 15) | public static void main(String[] args) throws Exception {
    method runCommands (line 45) | private static void runCommands(String[] args) throws Exception {

FILE: latte-build/src/main/java/lt/repl/IO.java
  class IO (line 5) | public class IO {
    method IO (line 13) | public IO(InputStream in, OutputStream out, OutputStream err) {

FILE: latte-build/src/main/java/lt/repl/JLineStringReader.java
  class JLineStringReader (line 11) | public class JLineStringReader implements StringReader {
    method JLineStringReader (line 16) | public JLineStringReader() {
    method setIO (line 19) | @Override
    method setCtrlCHandler (line 25) | @Override
    method initReader (line 30) | private void initReader() throws IOException {
    method read (line 38) | @Override

FILE: latte-build/src/main/java/lt/repl/REPL.java
  class REPL (line 40) | public class REPL {
    method REPL (line 48) | public REPL(StringReader reader, IO io, CtrlCHandler.ExitCallback exit...
    method start (line 54) | public void start() throws Exception {
    method showObjectStructure (line 206) | private void showObjectStructure(Object o) throws IllegalAccessExcepti...
    method sleep (line 230) | private void sleep(long millis) {
    method handleCtrlC (line 238) | public void handleCtrlC() {

FILE: latte-build/src/main/java/lt/repl/SimpleStringReader.java
  class SimpleStringReader (line 9) | public class SimpleStringReader implements StringReader {
    method SimpleStringReader (line 12) | public SimpleStringReader() {
    method setIO (line 15) | @Override
    method setCtrlCHandler (line 21) | @Override
    method read (line 35) | @Override

FILE: latte-build/src/main/java/lt/repl/StringReader.java
  type StringReader (line 6) | public interface StringReader {
    method setIO (line 7) | void setIO(IO io);
    method setCtrlCHandler (line 9) | void setCtrlCHandler(CtrlCHandler handler);
    method read (line 11) | String read() throws Exception;

FILE: latte-build/src/main/java/lt/repl/VersionRetriever.java
  class VersionRetriever (line 11) | class VersionRetriever {
    method version (line 12) | static String version() throws IOException {

FILE: latte-compiler/src/main/java/lt/compiler/AbstractScanner.java
  class AbstractScanner (line 13) | public abstract class AbstractScanner implements Scanner {
    method compare (line 130) | @Override
    method AbstractScanner (line 151) | public AbstractScanner(String fileName, Reader reader, Properties prop...
    method scan (line 169) | @Override
    method scan (line 181) | protected abstract void scan(Args args) throws IOException, SyntaxExce...
    method finalCheck (line 191) | protected void finalCheck(ElementStartNode root) throws UnknownTokenEx...
    method getTokenType (line 272) | protected final TokenType getTokenType(String str, LineCol lineCol) th...
    method createStartNode (line 293) | protected final void createStartNode(Args args, int indentation) {
    method checkStringEnd (line 306) | protected final boolean checkStringEnd(String line, int index) {
    method redirectToPairStart (line 324) | protected final void redirectToPairStart(Args args, Indent indent) thr...
    method redirectToDeeperStartNodeByIndent (line 349) | protected final void redirectToDeeperStartNodeByIndent(Args args, int ...

FILE: latte-compiler/src/main/java/lt/compiler/BraceScanner.java
  class BraceScanner (line 37) | public class BraceScanner extends AbstractScanner {
    method BraceScanner (line 46) | public BraceScanner(String fileName, Reader reader, Properties propert...
    method init (line 52) | private void init() {
    method scan (line 79) | @Override
    method scan (line 86) | @Override
    method scan (line 213) | private void scan(String line, Args args) throws SyntaxException {
    method finalCheck (line 380) | @Override
    method removeBraces (line 406) | private void removeBraces(ElementStartNode root, Element n) {

FILE: latte-compiler/src/main/java/lt/compiler/CodeGenerator.java
  class CodeGenerator (line 39) | public class CodeGenerator {
    method CodeGenerator (line 50) | public CodeGenerator(Set<STypeDef> types, Map<String, STypeDef> typeDe...
    method VisitLineNumber (line 62) | private void VisitLineNumber(MethodVisitor methodVisitor, LineCol line...
    method acc (line 73) | private int acc(List<SModifier> modifiers) {
    method typeToDesc (line 88) | private String typeToDesc(STypeDef type) {
    method typeToInternalName (line 120) | private String typeToInternalName(STypeDef type) {
    method methodDesc (line 135) | private String methodDesc(STypeDef returnType, List<STypeDef> paramete...
    method methodDescWithParameters (line 145) | private String methodDescWithParameters(STypeDef returnType, List<SPar...
    method generate (line 162) | public Map<String, byte[]> generate() {
    method generateAnnotation (line 235) | private void generateAnnotation(ClassWriter classWriter, SAnnoDef sAnn...
    method buildNew (line 276) | private void buildNew(MethodVisitor methodVisitor, CodeInfo info, Ins....
    method buildCast (line 313) | private void buildCast(MethodVisitor methodVisitor, CodeInfo info, Ins...
    method buildTwoVarOp (line 346) | private void buildTwoVarOp(MethodVisitor methodVisitor, CodeInfo info,...
    method buildLogicAnd (line 405) | private void buildLogicAnd(MethodVisitor methodVisitor, CodeInfo info,...
    method buildLogicOr (line 460) | private void buildLogicOr(MethodVisitor methodVisitor, CodeInfo info, ...
    method buildTALoad (line 505) | private void buildTALoad(MethodVisitor methodVisitor, CodeInfo info, I...
    method buildOneVarOp (line 531) | private void buildOneVarOp(MethodVisitor methodVisitor, CodeInfo info,...
    method buildNewArray (line 562) | private void buildNewArray(MethodVisitor methodVisitor, CodeInfo info,...
    method buildANewArray (line 598) | private void buildANewArray(MethodVisitor methodVisitor, CodeInfo info...
    method buildNewList (line 634) | private void buildNewList(MethodVisitor methodVisitor, CodeInfo info, ...
    method buildNewMap (line 674) | private void buildNewMap(MethodVisitor methodVisitor, CodeInfo info, I...
    method buildValuePack (line 712) | private void buildValuePack(MethodVisitor methodVisitor, CodeInfo info...
    method calculateIndexForLocalVariable (line 778) | private int calculateIndexForLocalVariable(LeftValue theVar, SemanticS...
    method buildValueAccess (line 814) | private void buildValueAccess(MethodVisitor methodVisitor, CodeInfo in...
    method buildPointerCastHelper (line 952) | private void buildPointerCastHelper(MethodVisitor methodVisitor, CodeI...
    method buildPrimitive (line 981) | private void buildPrimitive(MethodVisitor methodVisitor, CodeInfo info...
    method buildUnitWhenInvokeVoid (line 1015) | private void buildUnitWhenInvokeVoid(SInvokable invokable, CodeInfo in...
    method _buildOptimizedPointerTLoad (line 1024) | private void _buildOptimizedPointerTLoad(MethodVisitor methodVisitor, ...
    method _buildUnbox (line 1045) | private void _buildUnbox(MethodVisitor methodVisitor, CodeInfo info, V...
    method _buildOptimizedPointerTStore (line 1103) | private void _buildOptimizedPointerTStore(MethodVisitor methodVisitor,...
    method canOptimizePointerRetrieving (line 1123) | private boolean canOptimizePointerRetrieving(Ins.InvokeVirtual invoke,...
    method isParameterWrappingPointer (line 1128) | private boolean isParameterWrappingPointer(LeftValue v) {
    method buildInvoke (line 1145) | private void buildInvoke(MethodVisitor methodVisitor, CodeInfo info, I...
    method buildReturn (line 1414) | private void buildReturn(MethodVisitor methodVisitor, CodeInfo info, I...
    method buildTStore (line 1436) | private void buildTStore(MethodVisitor methodVisitor, CodeInfo info, I...
    method buildPutField (line 1495) | private void buildPutField(MethodVisitor methodVisitor, CodeInfo info,...
    method buildGetField (line 1518) | private void buildGetField(MethodVisitor methodVisitor, CodeInfo info,...
    method buildPutStatic (line 1552) | private void buildPutStatic(MethodVisitor methodVisitor, CodeInfo info...
    method buildTAStore (line 1576) | private void buildTAStore(MethodVisitor methodVisitor, CodeInfo info, ...
    method buildMonitorEnter (line 1599) | private void buildMonitorEnter(MethodVisitor methodVisitor, CodeInfo i...
    method buildMonitorExit (line 1619) | private void buildMonitorExit(MethodVisitor methodVisitor, CodeInfo in...
    method buildOneIns (line 1652) | private void buildOneIns(MethodVisitor methodVisitor, CodeInfo info, I...
    method buildInstructions (line 1800) | private void buildInstructions(
    method buildStatic (line 1871) | private void buildStatic(ClassWriter classWriter, List<Instruction> st...
    method buildConstructor (line 1883) | private void buildConstructor(ClassWriter classWriter, List<SConstruct...
    method buildField (line 1916) | private void buildField(ClassWriter classWriter, List<SFieldDef> field...
    method buildMethod (line 1937) | private void buildMethod(ClassWriter classWriter, List<SMethodDef> met...
    method buildParameter (line 1982) | private void buildParameter(MethodVisitor methodVisitor, List<SParamet...
    method annotationIsVisible (line 2007) | private boolean annotationIsVisible(SAnno anno) {
    method buildAnnotationValue (line 2033) | private void buildAnnotationValue(AnnotationVisitor annotationVisitor,...
    method buildAnnotation (line 2069) | private void buildAnnotation(AnnotationVisitor annotationVisitor, SAnn...
    method parseValueIntoASMObject (line 2086) | private Object parseValueIntoASMObject(Value value) {

FILE: latte-compiler/src/main/java/lt/compiler/CodeInfo.java
  class CodeInfo (line 37) | public class CodeInfo {
    type Size (line 38) | public enum Size {
    class Container (line 50) | public static class Container {
      method Container (line 54) | public Container(Label label) {
    method CodeInfo (line 61) | public CodeInfo(int localInit, SInvokable invokable, InvokableMeta met...
    method push (line 68) | public void push(Size size) {
    method pop (line 77) | public void pop(int count) {
    method getMaxLocal (line 85) | public int getMaxLocal() {
    method registerLocal (line 89) | public void registerLocal(int theLocal) {
    method getMaxStack (line 95) | public int getMaxStack() {
    method getCurrentStackDepth (line 99) | public int getCurrentStackDepth() {
    method peekSize (line 103) | public Size peekSize() {
    method getInvokable (line 107) | public SInvokable getInvokable() {
    method isStatic (line 111) | public boolean isStatic() {
    method getMeta (line 115) | public InvokableMeta getMeta() {
    method toString (line 119) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/CompileException.java
  class CompileException (line 30) | public class CompileException extends Exception {
    method CompileException (line 31) | public CompileException() {
    method CompileException (line 34) | public CompileException(Throwable cause) {
    method CompileException (line 38) | public CompileException(String message) {
    method CompileException (line 42) | public CompileException(String message, Throwable cause) {

FILE: latte-compiler/src/main/java/lt/compiler/CompileUtil.java
  class CompileUtil (line 39) | public class CompileUtil {
    method isNumber (line 46) | public static boolean isNumber(String str) {
    method isBoolean (line 62) | public static boolean isBoolean(String str) {
    method isString (line 72) | public static boolean isString(String str) {
    method isKey (line 96) | public static boolean isKey(String str) {
    method isJavaValidName (line 108) | public static boolean isJavaValidName(String str) {
    method isValidName (line 129) | public static boolean isValidName(String str) {
    method isPackage (line 142) | public static boolean isPackage(Element element) {
    method isValidNameChar (line 164) | public static boolean isValidNameChar(char c) {
    method isValidNameStartChar (line 174) | public static boolean isValidNameStartChar(char c) {
    method isModifier (line 188) | public static boolean isModifier(String str) {
    method modifierIsCompatible (line 199) | public static boolean modifierIsCompatible(String str, Set<Modifier> m...
    method getModifierFromString (line 221) | public static Modifier.Available getModifierFromString(String str) {
    method get_next_node (line 267) | public static Node get_next_node(Node n) {
    method isLambda (line 285) | public static boolean isLambda(Element elem) throws UnexpectedEndExcep...
    method checkMethodDef (line 310) | public static int checkMethodDef(Element elem, boolean annosOrModifier...
    method isTwoVariableOperator (line 373) | public static boolean isTwoVariableOperator(String str) {
    method isOneVariableOperatorPost (line 381) | public static boolean isOneVariableOperatorPost(String str) {
    method isOneVariableOperatorPreWithoutCheckingExps (line 393) | public static boolean isOneVariableOperatorPreWithoutCheckingExps(Stri...
    method isOneVariableOperatorPreMustCheckExps (line 397) | public static boolean isOneVariableOperatorPreMustCheckExps(String str) {
    method twoVar_higherOrEqual (line 425) | public static boolean twoVar_higherOrEqual(String a, String b) {
    method find_twoVar_priority (line 437) | private static int find_twoVar_priority(String s) {
    method expecting (line 449) | public static void expecting(String token, Node previous, Node got, Er...
    method isAssign (line 459) | public static boolean isAssign(String s) {
    method isDestructing (line 468) | public static boolean isDestructing(String str) {
    method isPatternMatchingSymbol (line 472) | public static boolean isPatternMatchingSymbol(String str) {
    method isDestructing (line 476) | public static boolean isDestructing(Element e) {
    method isDestructingWithoutType (line 511) | public static boolean isDestructingWithoutType(Element e) {
    method isSync (line 535) | public static boolean isSync(Element elem) {
    method isPrimitive (line 553) | public static boolean isPrimitive(String s) {
    method validateValidName (line 568) | public static String validateValidName(String validName) {
    method isSymbol (line 573) | public static boolean isSymbol(String str) {
    method visitStmt (line 583) | public static <T> void visitStmt(Statement s, Function2<Boolean, ? sup...
    method visitStmt (line 592) | public static <T> void visitStmt(Collection<? extends Statement> stmts...

FILE: latte-compiler/src/main/java/lt/compiler/ErrorManager.java
  class ErrorManager (line 40) | public class ErrorManager {
    class Out (line 41) | public static class Out {
      method allNull (line 47) | public static Out allNull() {
    class CompilingError (line 68) | public static class CompilingError {
      method CompilingError (line 81) | private CompilingError(String msg, LineCol lineCol, int type) {
    method ErrorManager (line 95) | public ErrorManager(boolean fastFail) {
    method setFastFail (line 104) | public void setFastFail(boolean fastFail) {
    method putLineRecord (line 115) | public void putLineRecord(String file, int line, String content) {
    method buildErrInfo (line 140) | public String buildErrInfo(String file, int line, int col) {
    method buildErrInfo (line 159) | public String buildErrInfo(LineCol lineCol) {
    method print (line 164) | private void print(String msg, PrintStream out) {
    method error (line 177) | public void error(String msg) {
    method warning (line 186) | public void warning(String msg) {
    method info (line 195) | public void info(String msg) {
    method debug (line 204) | public void debug(String msg) {
    method SyntaxException (line 215) | public void SyntaxException(String msg, LineCol lineCol) throws Syntax...
    method SyntaxException (line 229) | public void SyntaxException(String msg, LineCol lineCol, SyntaxExcepti...
    method UnexpectedEndException (line 240) | public void UnexpectedEndException(LineCol lineCol) throws UnexpectedE...
    method UnexpectedTokenException (line 255) | public void UnexpectedTokenException(String expected, String got, Line...
    method UnexpectedTokenException (line 272) | public void UnexpectedTokenException(String token, LineCol lineCol) th...
    method IllegalIndentationException (line 288) | public void IllegalIndentationException(int expectedIndent, LineCol li...
    method UnexpectedNewLayerException (line 303) | public void UnexpectedNewLayerException(LineCol lineCol) throws Unexpe...
    method UnknownTokenException (line 319) | public void UnknownTokenException(String token, LineCol lineCol) throw...
    method DuplicateVariableNameException (line 328) | public void DuplicateVariableNameException(String name, LineCol lineCo...

FILE: latte-compiler/src/main/java/lt/compiler/IndentScanner.java
  class IndentScanner (line 57) | public class IndentScanner extends AbstractScanner {
    method IndentScanner (line 66) | public IndentScanner(String fileName, Reader reader, Properties proper...
    method scan (line 86) | @Override
    method scan (line 293) | private void scan(String line, Args args) throws SyntaxException {
    method finalCheck (line 472) | @Override
    method removeLayerControlSymbols (line 511) | private void removeLayerControlSymbols(ElementStartNode root, Element ...

FILE: latte-compiler/src/main/java/lt/compiler/LineCol.java
  class LineCol (line 34) | public class LineCol implements Serializable {
    method LineCol (line 48) | public LineCol(String fileName, int line, int column) {
    method SYNTHETIC_WITH_FILE (line 59) | public static LineCol SYNTHETIC_WITH_FILE(String file) {
    method toString (line 63) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/LtBug.java
  class LtBug (line 30) | public class LtBug extends Error {
    method LtBug (line 31) | public LtBug(String msg) {
    method LtBug (line 35) | public LtBug(Throwable t) {
    method LtBug (line 39) | public LtBug(String message, Throwable cause) {

FILE: latte-compiler/src/main/java/lt/compiler/MultipleClassLoader.java
  class MultipleClassLoader (line 13) | public class MultipleClassLoader extends ClassLoader {
    method MultipleClassLoader (line 17) | public MultipleClassLoader(ClassLoader... classLoaders) {
    method loadClass (line 27) | @Override
    method loadClass (line 38) | @Override
    method getResource (line 63) | @Override
    method getResources (line 74) | @Override
    class ProxyEnumeration (line 79) | class ProxyEnumeration implements Enumeration<URL> {
      method ProxyEnumeration (line 84) | ProxyEnumeration(Iterator<ClassLoader> clIt, String resourceS) {
      method hasMoreElements (line 89) | @Override
      method nextElement (line 94) | @Override
    method getResourceAsStream (line 114) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/Parser.java
  class Parser (line 47) | public class Parser {
    class ParseFail (line 51) | private class ParseFail extends RuntimeException {
    method Parser (line 114) | public Parser(ElementStartNode root, ErrorManager err) {
    method addUsedVarNames (line 124) | private void addUsedVarNames(Set<String> names) {
    method jumpToTheNearestEndingNode (line 133) | private void jumpToTheNearestEndingNode() throws SyntaxException {
    method getAndClear (line 139) | private <E> Set<E> getAndClear(Set<E> set) {
    method parse (line 151) | public List<Statement> parse() throws SyntaxException {
    method nextNode (line 265) | private void nextNode(boolean canBeEnd) throws SyntaxException {
    method parse_statement (line 330) | private Statement parse_statement() throws SyntaxException {
    method parse_annotation (line 524) | private AnnotationDef parse_annotation() throws SyntaxException {
    method parse_object (line 558) | private ObjectDef parse_object() throws SyntaxException {
    method parse_synchronized (line 580) | private AST.Synchronized parse_synchronized() throws SyntaxException {
    method parseElemStart (line 623) | private List<Statement> parseElemStart(
    method parse_while (line 649) | private AST.While parse_while() throws SyntaxException {
    method parse_do_while (line 679) | private AST.While parse_do_while() throws SyntaxException {
    method parse_pkg_import (line 724) | private Import parse_pkg_import() throws SyntaxException {
    method parse_pkg_declare (line 788) | private PackageDeclare parse_pkg_declare() throws SyntaxException {
    method parse_anno (line 841) | private void parse_anno() throws SyntaxException {
    method parse_throw (line 905) | private AST.Throw parse_throw() throws SyntaxException {
    method parse_try (line 930) | private AST.Try parse_try() throws SyntaxException {
    method parse_interface (line 1050) | private InterfaceDef parse_interface() throws SyntaxException {
    method parse_generic (line 1139) | private List<AST.Access> parse_generic() throws SyntaxException {
    method parse_class (line 1182) | private ClassDef parse_class() throws SyntaxException {
    method parse_fun (line 1353) | private FunDef parse_fun() throws SyntaxException {
    method parse_for (line 1409) | private AST.For parse_for() throws SyntaxException {
    method parse_if (line 1460) | private AST.If parse_if() throws SyntaxException {
    method parse_method_def_variables (line 1548) | private void parse_method_def_variables(List<VariableDef> variableList...
    method parse_method_def_normal (line 1598) | private MethodDef parse_method_def_normal() throws SyntaxException {
    method parse_method_def_empty (line 1625) | private MethodDef parse_method_def_empty() throws SyntaxException {
    method parse_method_def_one_stmt (line 1660) | private MethodDef parse_method_def_one_stmt() throws SyntaxException {
    method parse_method_def_type (line 1693) | private MethodDef parse_method_def_type() throws SyntaxException {
    method parse_expression (line 1747) | private void parse_expression() throws SyntaxException {
    method parse_dot_start_invocation (line 2211) | private void parse_dot_start_invocation() throws SyntaxException {
    method parse_destructing_withoutType (line 2243) | private void parse_destructing_withoutType() throws SyntaxException {
    method parse_destructing_withoutType$patterns (line 2279) | private List<AST.Pattern> parse_destructing_withoutType$patterns(Eleme...
    method parse_destructing (line 2313) | private void parse_destructing() throws SyntaxException {
    method parse_pattern_matching (line 2327) | private void parse_pattern_matching() throws SyntaxException {
    method parse_pattern_matching_$_extract_var_names (line 2387) | private Set<String> parse_pattern_matching_$_extract_var_names(AST.Pat...
    method parse_pattern_matching_$_parse_pattern$_parse (line 2407) | private AST.Pattern parse_pattern_matching_$_parse_pattern$_parse(bool...
    method parse_pattern_matching_$_parse_pattern (line 2517) | private AST.Pattern parse_pattern_matching_$_parse_pattern(boolean par...
    method parse_method_def_no_par (line 2529) | private MethodDef parse_method_def_no_par() throws SyntaxException {
    method parse_operator_like_invocation (line 2580) | private void parse_operator_like_invocation() throws SyntaxException {
    method parse_map (line 2650) | private void parse_map() throws SyntaxException {
    method parseExpMap (line 2680) | private AST.MapExp parseExpMap(ElementStartNode startNode) throws Synt...
    method parse_index_access (line 2727) | private void parse_index_access() throws SyntaxException {
    method parse_array_exp (line 2767) | private void parse_array_exp() throws SyntaxException {
    method parse_lambda (line 2827) | private void parse_lambda() throws SyntaxException {
    method parsedExpsNotEmpty (line 2897) | private void parsedExpsNotEmpty(Node tokenNode) throws UnexpectedToken...
    method parse_twoVarOperation (line 2912) | private void parse_twoVarOperation() throws SyntaxException {
    method parse_oneVarPostOperation (line 2957) | private void parse_oneVarPostOperation() throws SyntaxException {
    method parse_oneVarPreOperation (line 2979) | private void parse_oneVarPreOperation() throws SyntaxException {
    method parse_package (line 3001) | private void parse_package(boolean parse_exp) throws SyntaxException {
    method parse_access (line 3040) | private void parse_access(boolean parse_exp) throws SyntaxException {
    method next_exp (line 3082) | private Expression next_exp(boolean expectingStartNode, boolean clearV...
    method get_exp (line 3094) | private Expression get_exp(boolean expectingStartNode, boolean clearVa...
    method annosIsEmpty (line 3113) | private void annosIsEmpty() throws SyntaxException {
    method modifiersIsEmpty (line 3136) | private void modifiersIsEmpty() throws SyntaxException {
    method parse_assign (line 3159) | private void parse_assign() throws SyntaxException {
    method parse_modifier (line 3213) | private void parse_modifier() throws SyntaxException {
    method parse_var (line 3229) | private void parse_var() throws SyntaxException {
    method parse_cls_for_type_spec (line 3257) | private AST.Access parse_cls_for_type_spec() throws SyntaxException {
    method parse_type_spec (line 3320) | private void parse_type_spec() throws SyntaxException {

FILE: latte-compiler/src/main/java/lt/compiler/Properties.java
  class Properties (line 6) | public class Properties {

FILE: latte-compiler/src/main/java/lt/compiler/PushLineBackReader.java
  class PushLineBackReader (line 11) | public class PushLineBackReader extends Reader {
    method PushLineBackReader (line 15) | public PushLineBackReader(Reader reader) {
    method readLine (line 23) | public String readLine() throws IOException {
    method push (line 31) | public void push(String line) {
    method read (line 35) | @Override
    method close (line 40) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/SClassWriter.java
  class SClassWriter (line 14) | public class SClassWriter extends ClassWriter {
    method SClassWriter (line 17) | public SClassWriter(int flags, Map<String, STypeDef> typeDefMap) {
    method getCommonSuperClass (line 22) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/Scanner.java
  type Scanner (line 34) | public interface Scanner {
    method scan (line 35) | ElementStartNode scan() throws IOException, SyntaxException;

FILE: latte-compiler/src/main/java/lt/compiler/ScannerSwitcher.java
  class ScannerSwitcher (line 35) | public class ScannerSwitcher implements Scanner {
    method ScannerSwitcher (line 38) | public ScannerSwitcher(String fileName, Reader reader, Properties prop...
    method scan (line 68) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/SemanticProcessor.java
  class SemanticProcessor (line 66) | public class SemanticProcessor {
    method SemanticProcessor (line 157) | public SemanticProcessor(Map<String, List<Statement>> mapOfStatements,...
    method byte2hex (line 175) | public static String byte2hex(byte[] b) {
    method hex2byte (line 190) | public static byte[] hex2byte(String str) {
    method getTypes (line 210) | public Map<String, STypeDef> getTypes() {
    method parse (line 231) | public Set<STypeDef> parse() throws SyntaxException {
    method recordClass (line 480) | private void recordClass(ClassDef c, String pkg, List<STypeDef> generi...
    method recordClass (line 484) | private void recordClass(ClassDef c, String pkg, List<STypeDef> generi...
    method recordInterface (line 529) | private void recordInterface(InterfaceDef i, String pkg, List<STypeDef...
    method recordInterface (line 533) | private void recordInterface(InterfaceDef i, String pkg, List<STypeDef...
    method recordFun (line 568) | private void recordFun(FunDef f, String pkg, List<STypeDef> generics) ...
    method recordFun (line 572) | private void recordFun(FunDef f, String pkg, List<STypeDef> generics, ...
    method recordObject (line 595) | private void recordObject(ObjectDef o, String pkg, List<STypeDef> gene...
    method recordObject (line 599) | private void recordObject(ObjectDef o, String pkg, List<STypeDef> gene...
    method recordAnnotation (line 622) | private void recordAnnotation(AnnotationDef a, String pkg, List<STypeD...
    method recordAnnotation (line 626) | private void recordAnnotation(AnnotationDef a, String pkg, List<STypeD...
    method handleGenericAST (line 661) | private boolean handleGenericAST(AST.Access accessType,
    method tryToApplyGenericType (line 710) | private boolean tryToApplyGenericType(AST.Access access,
    method applyToHalfAppliedTypes (line 781) | private void applyToHalfAppliedTypes(Map<String, HalfAppliedTypes> tem...
    method checkAndGetPackage (line 821) | private AST.PackageRef checkAndGetPackage(Map<String, String> fileName...
    method isPackage (line 861) | private boolean isPackage(Map<String, String> fileNameToPackageName, S...
    method addImportImplicit (line 867) | private void addImportImplicit() throws SyntaxException {
    method addImportStatic (line 951) | private void addImportStatic() throws SyntaxException {
    method addRetention (line 1011) | private void addRetention() throws SyntaxException {
    method packageExistsInClassPath (line 1042) | public static boolean packageExistsInClassPath(String pkg, ClassLoader...
    method packageExistInJRE (line 1049) | public boolean packageExistInJRE(String pkg) {
    method findJava9 (line 1140) | private boolean findJava9(File home) {
    method findJava9JMods (line 1144) | private boolean findJava9JMods(File home) {
    method findPackage (line 1174) | private static boolean findPackage(String pkg, List<ZipFile> files) {
    method findPackage (line 1183) | private static boolean findPackage(String pkg, Enumeration<? extends Z...
    method step2 (line 1204) | public void step2(Map<String, String> fileNameToPackageName) throws Sy...
    method assertToBeAnnotationField (line 1485) | private void assertToBeAnnotationField(STypeDef type) throws SyntaxExc...
    method parseAnnotationFields (line 1506) | public void parseAnnotationFields(SAnnoDef sAnnoDef, List<Statement> s...
    method checkAndAddImplicitAnno (line 1532) | private void checkAndAddImplicitAnno(SAnnotationPresentable annoPresen...
    method parseClassDefInfo (line 1559) | private void parseClassDefInfo(SClassDef sClassDef,
    method parseFieldsAndMethodsForClass (line 1630) | private void parseFieldsAndMethodsForClass(SClassDef sClassDef,
    method step3 (line 1705) | public void step3() throws SyntaxException {
    method checkAndFillAnnotations (line 1891) | private void checkAndFillAnnotations() throws SyntaxException {
    method transformIntoAnnoValidValue (line 1979) | private Value transformIntoAnnoValidValue(Value value, LineCol lineCol...
    method step4 (line 2020) | public void step4() throws SyntaxException {
    method generateGenericTemplateClass (line 2248) | private void generateGenericTemplateClass(STypeDef sTypeDef) throws Sy...
    method checkOverrideAllMethods (line 2303) | public void checkOverrideAllMethods(STypeDef sTypeDef) throws SyntaxEx...
    method fillDefaultParamMethod (line 2340) | public void fillDefaultParamMethod(SInvokable invokable, SemanticScope...
    method fillMethodsIntoDataClass (line 2391) | public void fillMethodsIntoDataClass(SClassDef cls) throws SyntaxExcep...
    method parseMethod (line 2822) | public void parseMethod(SMethodDef methodDef, List<Statement> statemen...
    method getJava_lang_NullPointerException_cons (line 2908) | private SConstructorDef getJava_lang_NullPointerException_cons() throw...
    method getJava_lang_IllegalArgumentException_cons (line 2923) | private SConstructorDef getJava_lang_IllegalArgumentException_cons() t...
    method paramValueAvaliable (line 2945) | public void paramValueAvaliable(List<SParameter> params, List<Instruct...
    method transformLastExpToReturn (line 2990) | private void transformLastExpToReturn(List<Statement> statements) {
    method parseAnnoValues (line 3017) | public void parseAnnoValues(Collection<SAnno> annos) throws SyntaxExce...
    method checkAndCastAnnotationValues (line 3063) | public Value checkAndCastAnnotationValues(Value value, LineCol lineCol...
    method isInt (line 3120) | public boolean isInt(STypeDef requiredType, NumberLiteral literal, Lin...
    method isLong (line 3140) | public boolean isLong(STypeDef requiredType, NumberLiteral literal, Li...
    method isShort (line 3160) | public boolean isShort(STypeDef requiredType, NumberLiteral literal, L...
    method isByte (line 3180) | public boolean isByte(STypeDef requiredType, NumberLiteral literal, Li...
    method isFloat (line 3200) | public boolean isFloat(STypeDef requiredType, LineCol lineCol) throws ...
    method isDouble (line 3218) | public boolean isDouble(STypeDef requiredType, LineCol lineCol) throws...
    method isBool (line 3235) | public boolean isBool(STypeDef requiredType, LineCol lineCol) throws S...
    method isChar (line 3256) | public boolean isChar(STypeDef requiredType, StringLiteral literal, Li...
    method isChar (line 3287) | public boolean isChar(StringLiteral literal, LineCol lineCol, boolean ...
    method getThrowable_Class (line 3301) | public SClassDef getThrowable_Class() throws SyntaxException {
    method parseStatement (line 3336) | public void parseStatement(Statement statement,
    method getLang_castToBool (line 3416) | public SMethodDef getLang_castToBool() throws SyntaxException {
    method getLang_castToThrowable (line 3439) | public SMethodDef getLang_castToThrowable() throws SyntaxException {
    method parseInnerMethod (line 3475) | public SMethodDef parseInnerMethod(MethodDef methodDef, SemanticScope ...
    method parseInstructionFromSynchronized (line 3695) | public void parseInstructionFromSynchronized(AST.Synchronized aSynchro...
    method insertInstructionsBeforeReturn (line 3818) | public int insertInstructionsBeforeReturn(List<Instruction> instructions,
    method getLang_throwableWrapperObject (line 3851) | public SMethodDef getLang_throwableWrapperObject() throws SyntaxExcept...
    method parseInstructionFromTry (line 3919) | public void parseInstructionFromTry(AST.Try aTry,
    method getLtIterator_Get (line 4202) | public SMethodDef getLtIterator_Get() throws SyntaxException {
    method getLtIterator_hasNext (line 4225) | public SMethodDef getLtIterator_hasNext() throws SyntaxException {
    method getLtIterator_next (line 4248) | public SMethodDef getLtIterator_next() throws SyntaxException {
    method parseInstructionFromFor (line 4293) | public void parseInstructionFromFor(AST.For aFor,
    method parseInstructionFromWhile (line 4381) | public void parseInstructionFromWhile(AST.While aWhile, STypeDef metho...
    method parseStatementPartOfIf (line 4452) | private void parseStatementPartOfIf(AST.If.IfPair ifPair, STypeDef met...
    method parseInstructionFromIf (line 4505) | public void parseInstructionFromIf(AST.If anIf,
    method parseInstructionFromReturn (line 4562) | public void parseInstructionFromReturn(AST.Return ret, STypeDef method...
    method getLang_putField (line 4600) | public SMethodDef getLang_putField() throws SyntaxException {
    method parseInstructionFromAssignment (line 4629) | public void parseInstructionFromAssignment(Value assignTo,
    method parseValueFromVariableDef (line 4838) | public Value parseValueFromVariableDef(VariableDef variableDef, Semant...
    method getPointer_con (line 4991) | public SConstructorDef getPointer_con() throws SyntaxException {
    method constructPointer (line 5006) | public Ins.New constructPointer(boolean nonnull, boolean nonempty) thr...
    method getPointer_set (line 5015) | public SMethodDef getPointer_set() throws SyntaxException {
    method invokePointerSet (line 5028) | public Ins.InvokeVirtual invokePointerSet(Value target, Value valueToS...
    method getPointer_get (line 5044) | public SMethodDef getPointer_get() throws SyntaxException {
    method invokePointerGet (line 5057) | public Value invokePointerGet(Value target, LineCol lineCol) throws Sy...
    method getPointingType (line 5073) | public STypeDef getPointingType(STypeDef pointerT) throws SyntaxExcept...
    method getLtRuntime_destruct (line 5085) | public SMethodDef getLtRuntime_destruct() throws SyntaxException {
    method getList_get (line 5102) | public SMethodDef getList_get() throws SyntaxException {
    method getMap_get (line 5119) | private SMethodDef getMap_get() throws SyntaxException {
    method destructCanChangeInLocalVariable (line 5134) | private boolean destructCanChangeInLocalVariable(AST.Destruct d) throw...
    method parseValueFromDestruct (line 5161) | public Value parseValueFromDestruct(AST.Destruct destruct, SemanticSco...
    method isAssignable (line 5293) | private boolean isAssignable(STypeDef sTypeDef, String typeName) throw...
    method primitiveOrBoxed (line 5297) | private Value primitiveOrBoxed(STypeDef required, Value primitive) thr...
    method parseValueFromExpression (line 5335) | public Value parseValueFromExpression(Expression exp, STypeDef require...
    method parseValueFromPatternMatching (line 5577) | public Value parseValueFromPatternMatching(AST.PatternMatching pm,
    type PatternMatchingParser (line 5654) | private interface PatternMatchingParser {
      method parse (line 5655) | List<Statement> parse(
    class PatternMatchingDefaultParser (line 5664) | private class PatternMatchingDefaultParser implements PatternMatchingP...
      method parse (line 5665) | @Override
    class PatternMatchingTypeParser (line 5671) | private class PatternMatchingTypeParser implements PatternMatchingPars...
      method parse (line 5672) | @Override
    class PatternMatchingValueParser (line 5689) | private class PatternMatchingValueParser implements PatternMatchingPar...
      method parse (line 5690) | @Override
    class PatternMatchingDefineParser (line 5705) | private class PatternMatchingDefineParser implements PatternMatchingPa...
      method parse (line 5706) | @Override
    class PatternMatchingDestructParser (line 5743) | private class PatternMatchingDestructParser implements PatternMatching...
      method PatternMatchingDestructParser (line 5746) | private PatternMatchingDestructParser(int initialCount) {
      method parse (line 5750) | @Override
    method parsePatternMatchingMethod (line 5866) | private void parsePatternMatchingMethod(Map.Entry<AST.PatternCondition...
    method parseValueFromGeneratorSpec (line 5948) | public Value parseValueFromGeneratorSpec(AST.GeneratorSpec gs, STypeDe...
    method serializeObjectToString (line 6001) | private String serializeObjectToString(Serializable ser) {
    method decodeSerExp (line 6021) | public Value decodeSerExp(String serStr, SemanticScope scope, LineCol ...
    method parseValueFromNew (line 6115) | public Value parseValueFromNew(AST.New aNew, SemanticScope scope) thro...
    method getLang_require (line 6146) | public SMethodDef getLang_require() throws SyntaxException {
    method parseValueFromInvocationWithNames (line 6174) | public ValuePack parseValueFromInvocationWithNames(AST.Invocation invo...
    method getDefaultLambdaFunction (line 6249) | public SInterfaceDef getDefaultLambdaFunction(int argCount, LineCol li...
    method getMethodForLambda (line 6266) | public boolean getMethodForLambda(STypeDef requiredType,
    method parseValueFromLambda (line 6422) | public Value parseValueFromLambda(AST.Lambda lambda, STypeDef required...
    method getObject_Class (line 6533) | public SClassDef getObject_Class() throws SyntaxException {
    method buildAClassForLambda (line 6555) | public SClassDef buildAClassForLambda(STypeDef lambdaClassType, boolea...
    method parseValueFromProcedure (line 6729) | public Value parseValueFromProcedure(AST.Procedure procedure, STypeDef...
    method parseValueFromMapExp (line 6769) | public Value parseValueFromMapExp(AST.MapExp mapExp, SemanticScope sco...
    method parseValueFromArrayExp (line 6802) | public Value parseValueFromArrayExp(AST.ArrayExp arrayExp, STypeDef re...
    method parseValueFromAssignment (line 6911) | public ValuePack parseValueFromAssignment(AST.Assignment exp, Semantic...
    method invoke_Unit_get (line 6965) | public Ins.InvokeStatic invoke_Unit_get(LineCol lineCol) throws Syntax...
    method parseValueFromTwoVarOp (line 6990) | public Value parseValueFromTwoVarOp(TwoVariableOperation tvo, Semantic...
    method invokeMethodWithArgs (line 7012) | public Value invokeMethodWithArgs(LineCol lineCol, STypeDef targetType...
    method parseValueFromTwoVarOpILFD (line 7106) | public Value parseValueFromTwoVarOpILFD(Value left, int baseOp, String...
    method getLang_compare (line 7157) | public SMethodDef getLang_compare() throws SyntaxException {
    method getComparable_compareTo (line 7184) | public SMethodDef getComparable_compareTo() throws SyntaxException {
    method parseValueFromTwoVarOpCompare (line 7211) | public Value parseValueFromTwoVarOpCompare(Value left, int compare_mod...
    method getLang_compareRef (line 7276) | public SMethodDef getLang_compareRef() throws SyntaxException {
    method parseValueFromTwoVarOp (line 7319) | public Value parseValueFromTwoVarOp(Value left, String op, Value right...
    method getCommonParent (line 7524) | public STypeDef getCommonParent(STypeDef type1, STypeDef type2) throws...
    method getLang_is (line 7548) | public SMethodDef getLang_is() throws SyntaxException {
    method getLang_not (line 7573) | public SMethodDef getLang_not() throws SyntaxException {
    method parseSelfOneVarOp (line 7601) | public Value parseSelfOneVarOp(Operation exp, SemanticScope scope) thr...
    method parseValueFromOneVarOp (line 7677) | public Value parseValueFromOneVarOp(Operation exp, SemanticScope scope...
    method parseArguments (line 7811) | public List<Value> parseArguments(List<Expression> args, SemanticScope...
    method parseValueFromIndex (line 7833) | public Value parseValueFromIndex(AST.Index index, SemanticScope scope)...
    method parseValueFromAccessType (line 7872) | public Value parseValueFromAccessType(AST.Access access, List<Import> ...
    method parseValueFromAccess (line 7920) | public Value parseValueFromAccess(AST.Access access, SemanticScope sco...
    method __parseValueFromAccess (line 7939) | private Value __parseValueFromAccess(AST.Access access, SemanticScope ...
    method invokeGetField (line 8158) | public Ins.InvokeStatic invokeGetField(Value target, String name, STyp...
    method getLang_getField (line 8178) | public SMethodDef getLang_getField() throws SyntaxException {
    method findFieldFromTypeDef (line 8205) | public SFieldDef findFieldFromTypeDef(String fieldName, STypeDef targe...
    method findFieldFromClassDef (line 8223) | public SFieldDef findFieldFromClassDef(String fieldName, SClassDef the...
    method findFieldFromInterfaceDef (line 8279) | public SFieldDef findFieldFromInterfaceDef(String fieldName, SInterfac...
    method cast (line 8305) | public Value cast(STypeDef requiredType, Value v, STypeDef callerClass...
    method castObjToObj (line 8489) | public Value castObjToObj(STypeDef type, Value v, STypeDef callerClass...
    method castObjToPrimitive (line 8525) | public Value castObjToPrimitive(PrimitiveTypeDef type, Value v, LineCo...
    method whetherTheMethodIsOverriddenByMethodsInTheList (line 8624) | public boolean whetherTheMethodIsOverriddenByMethodsInTheList(SMethodD...
    method findMethodFromInterfaceWithArguments (line 8668) | public void findMethodFromInterfaceWithArguments(String name, List<Val...
    method findMethodFromClassWithArguments (line 8722) | public void findMethodFromClassWithArguments(String name, List<Value> ...
    method findMethodFromTypeWithArguments (line 8832) | public void findMethodFromTypeWithArguments(LineCol lineCol, String na...
    method constructingNewInst (line 8864) | public Value constructingNewInst(SClassDef classDef, List<Value> argLi...
    method parseValueFromInvocationFunctionalObject (line 8911) | public Value parseValueFromInvocationFunctionalObject(AST.Invocation i...
    method getDynamicClass (line 8925) | public SClassDef getDynamicClass() throws SyntaxException {
    method getDYNAMIC_callFunctionalObject (line 8934) | public SMethodDef getDYNAMIC_callFunctionalObject() throws SyntaxExcep...
    method getDYNAMIC_invoke (line 8949) | public SMethodDef getDYNAMIC_invoke() throws SyntaxException {
    method getDYNAMIC_construct (line 8964) | public SMethodDef getDYNAMIC_construct() throws SyntaxException {
    method callFunctionalObject (line 8987) | public Value callFunctionalObject(Value object, STypeDef callerClass, ...
    method packListValuesIntoObjectArray (line 9004) | private Value packListValuesIntoObjectArray(List<Value> values) throws...
    method packListValuesIntoBooleanArray (line 9025) | private Value packListValuesIntoBooleanArray(List<Value> values) throw...
    method invoke_Dynamic_invoke (line 9034) | private Ins.InvokeStatic invoke_Dynamic_invoke(STypeDef targetClass, V...
    method invoke_Dynamic_construct (line 9056) | private Ins.InvokeStatic invoke_Dynamic_construct(STypeDef targetClass...
    method parseValueFromInvocation (line 9094) | public Value parseValueFromInvocation(AST.Invocation invocation, Seman...
    method isGetFieldAtRuntime (line 9644) | public boolean isGetFieldAtRuntime(Value target) {
    method isInvokeAtRuntime (line 9667) | public boolean isInvokeAtRuntime(Value target) {
    method findBestMatch (line 9706) | public SMethodDef findBestMatch(List<Value> argList, List<SMethodDef> ...
    method castArgsForMethodInvoke (line 9755) | public List<Value> castArgsForMethodInvoke(List<Value> args, List<SPar...
    method findObjectInCurrentScopeWithName (line 9768) | public Value findObjectInCurrentScopeWithName(String name, SemanticSco...
    method __findObjectInCurrentScopeWithName (line 9782) | public Value __findObjectInCurrentScopeWithName(String name, SemanticS...
    method boxPrimitive (line 9809) | public Ins.InvokeStatic boxPrimitive(Value primitive, LineCol lineCol)...
    method unescape (line 9935) | public String unescape(String s, LineCol lineCol) throws SyntaxExcepti...
    method generateStringConcat (line 9971) | public Value generateStringConcat(String str, SemanticScope scope, Lin...
    method concatValuesToString (line 10051) | public Value concatValuesToString(List<Value> values, SemanticScope sc...
    method parseValueFromObject (line 10113) | public Value parseValueFromObject(Object o) throws SyntaxException {
    method recordAbstractMethodsForOverrideCheck_interface (line 10197) | public void recordAbstractMethodsForOverrideCheck_interface(SInterface...
    method recordAbstractMethodsForOverrideCheck_class (line 10229) | public void recordAbstractMethodsForOverrideCheck_class(SClassDef c,
    method recordAbstractMethodsForOverrideCheck (line 10260) | public void recordAbstractMethodsForOverrideCheck(SClassDef c, List<SM...
    method checkFinalAndOverride (line 10283) | public void checkFinalAndOverride(SMethodDef method, SMethodDef overri...
    method checkOverride_class (line 10305) | public void checkOverride_class(SMethodDef method,
    method checkOverride_interface (line 10334) | public void checkOverride_interface(SMethodDef method,
    method checkOverride (line 10357) | public void checkOverride(STypeDef sTypeDef) throws SyntaxException {
    method checkInterfaceCircularInheritance (line 10384) | public void checkInterfaceCircularInheritance(final SInterfaceDef toCh...
    method findMethodWithSameSignature (line 10407) | public SMethodDef findMethodWithSameSignature(SMethodDef method,
    method parseAnnos (line 10488) | public void parseAnnos(Set<AST.Anno> annos,
    method parseParameters (line 10535) | public void parseParameters(List<VariableDef> variableDefList, int i, ...
    method parseFieldsFromDestruct (line 10601) | public void parseFieldsFromDestruct(AST.Destruct d, SRefTypeDef type, ...
    method parseFieldModifiers (line 10621) | private void parseFieldModifiers(SFieldDef fieldDef, Set<Modifier> mod...
    method parseField (line 10705) | public void parseField(VariableDef v, STypeDef type, List<Import> impo...
    method parseMethod (line 10759) | public void parseMethod(MethodDef m, int i, STypeDef type, SMethodDef ...
    method select_import_class_interface_fun_object (line 10910) | public void select_import_class_interface_fun_object(Statement stmt,
    method getTypeWithName (line 10943) | public STypeDef getTypeWithName(String clsName, LineCol lineCol) throw...
    method buildTemplateAppliedName (line 10947) | private String buildTemplateAppliedName(String clsName, List<? extends...
    method getTypeWithName (line 10969) | public STypeDef getTypeWithName(String clsName, List<? extends STypeDe...
    method getAnnotationFromAnnotatedElement (line 11152) | public void getAnnotationFromAnnotatedElement(AnnotatedElement elem, S...
    method invokeAnnotationMethod (line 11179) | private Object invokeAnnotationMethod(Annotation a, Method m) throws I...
    method getModifierFromClass (line 11199) | public void getModifierFromClass(Class<?> cls, List<SModifier> modifie...
    method getModifierFromMember (line 11243) | public void getModifierFromMember(Member member, SMember sMember) {
    method getSuperInterfaceFromClass (line 11288) | public void getSuperInterfaceFromClass(Class<?> cls, List<SInterfaceDe...
    method getFieldsAndMethodsFromClass (line 11305) | public void getFieldsAndMethodsFromClass(Class<?> cls, STypeDef declar...
    method getParameterFromClassArray (line 11348) | public void getParameterFromClassArray(Class<?>[] paramTypes, SInvokab...
    method typeExists (line 11368) | public boolean typeExists(String type) {
    method getClassNameFromAccess (line 11389) | public String getClassNameFromAccess(AST.Access access) throws SyntaxE...
    method findClassNameWithImport (line 11410) | public String findClassNameWithImport(String name, List<Import> import...
    method getTypeWithAccess (line 11442) | public STypeDef getTypeWithAccess(AST.Access access, Map<String, SType...
    method getTypeWithAccess (line 11456) | public STypeDef getTypeWithAccess(AST.Access access, Map<String, SType...
    method putNameAndTypeDef (line 11518) | public void putNameAndTypeDef(STypeDef type, LineCol lineCol) throws S...
    method loadClass (line 11534) | public Class<?> loadClass(String name) throws ClassNotFoundException {
    method isPointerType (line 11571) | public boolean isPointerType(STypeDef type) {
    method getRealReturnType (line 11582) | public STypeDef getRealReturnType(STypeDef type, boolean doCast) {
    method transformAccess (line 11599) | private AST.Access transformAccess(AST.Access access) throws SyntaxExc...
    method accessToClassName (line 11653) | private String accessToClassName(AST.Access access, Map<String, STypeD...
    method getGenericMap (line 11726) | private Map<String, STypeDef> getGenericMap(STypeDef t) throws SyntaxE...
    method getGenericMap (line 11738) | private Map<String, STypeDef> getGenericMap(SClassDef c) {
    method getGenericMap (line 11763) | private Map<String, STypeDef> getGenericMap(SInterfaceDef interf) {
    method isGenericTemplateType (line 11775) | private boolean isGenericTemplateType(STypeDef t) {

FILE: latte-compiler/src/main/java/lt/compiler/SemanticScope.java
  class SemanticScope (line 36) | public class SemanticScope {
    class MethodRecorder (line 37) | public static class MethodRecorder {
      method MethodRecorder (line 41) | public MethodRecorder(SMethodDef method, int paramCount) {
    method SemanticScope (line 58) | public SemanticScope(SemanticScope parent, InvokableMeta meta) {
    method SemanticScope (line 64) | public SemanticScope(STypeDef sTypeDef, InvokableMeta meta) {
    method getMeta (line 70) | public InvokableMeta getMeta() {
    method getLeftValue (line 74) | public LeftValue getLeftValue(String name) {
    method getLocalVariables (line 84) | public LinkedHashMap<String, STypeDef> getLocalVariables() {
    method getRawLocalVariables (line 99) | public LinkedHashMap<String, LeftValue> getRawLocalVariables() {
    method putLeftValue (line 114) | public void putLeftValue(String name, LeftValue v) {
    method addMethodDef (line 118) | public void addMethodDef(String name, MethodRecorder innerMethod) {
    method getLeftValues (line 129) | public List<LeftValue> getLeftValues(int count, boolean lambdaParam) {
    method getInnerMethod (line 144) | public MethodRecorder getInnerMethod(String name) {
    method getInnerMethods (line 152) | public Map<String, MethodRecorder> getInnerMethods() {
    method containsInnerMethod (line 162) | public boolean containsInnerMethod(String name) {
    method type (line 166) | public STypeDef type() {
    method setThis (line 173) | public void setThis(Ins.This aThis) {
    method getThis (line 177) | public Ins.This getThis() {
    method generateTempName (line 184) | public String generateTempName() {

FILE: latte-compiler/src/main/java/lt/compiler/SyntaxException.java
  class SyntaxException (line 30) | public class SyntaxException extends CompileException {
    method SyntaxException (line 35) | public SyntaxException(String lineMsg, String msg, LineCol lineCol) {

FILE: latte-compiler/src/main/java/lt/compiler/UnexpectedEndException.java
  class UnexpectedEndException (line 30) | public class UnexpectedEndException extends SyntaxException {
    method UnexpectedEndException (line 31) | public UnexpectedEndException(String lineMsg, LineCol lineCol) {

FILE: latte-compiler/src/main/java/lt/compiler/UnexpectedTokenException.java
  class UnexpectedTokenException (line 30) | public class UnexpectedTokenException extends SyntaxException {
    method UnexpectedTokenException (line 32) | public UnexpectedTokenException(String lineMsg, String expected, Strin...
    method UnexpectedTokenException (line 36) | public UnexpectedTokenException(String lineMsg, String token, LineCol ...

FILE: latte-compiler/src/main/java/lt/compiler/lexical/Args.java
  class Args (line 34) | public class Args {
    method generateLineCol (line 60) | public LineCol generateLineCol() {
    method getLastNonFlexIndent (line 66) | public int getLastNonFlexIndent() {

FILE: latte-compiler/src/main/java/lt/compiler/lexical/Element.java
  class Element (line 32) | public class Element extends Node {
    method Element (line 35) | public Element(Args args, String content, TokenType tokenType) {
    method getContent (line 41) | public String getContent() {
    method setContent (line 45) | public void setContent(String content) {
    method checkWhetherIsValidName (line 49) | public void checkWhetherIsValidName() {
    method equals (line 55) | @Override
    method toString (line 66) | @Override
    method equalsIgnoreIndent (line 79) | @Override
    method toString (line 90) | @Override
    method remove (line 95) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/lexical/ElementStartNode.java
  class ElementStartNode (line 30) | public class ElementStartNode extends Node {
    method ElementStartNode (line 34) | public ElementStartNode(Args args, Indent indent) {
    method getIndent (line 39) | public Indent getIndent() {
    method equals (line 43) | @Override
    method toString (line 54) | @Override
    method hasLinkedNode (line 67) | public boolean hasLinkedNode() {
    method setLinkedNode (line 71) | public void setLinkedNode(Node linkedNode) {
    method getLinkedNode (line 75) | public Node getLinkedNode() {
    method toString (line 79) | @Override
    method remove (line 84) | @Override
    method equalsIgnoreIndent (line 89) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/lexical/EndingNode.java
  class EndingNode (line 30) | public class EndingNode extends Node {
    method EndingNode (line 37) | public EndingNode(Args args, int type) {
    method getType (line 45) | public int getType() {
    method toString (line 49) | @Override
    method equalsIgnoreIndent (line 62) | @Override
    method toString (line 67) | @Override
    method remove (line 72) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/lexical/IllegalIndentationException.java
  class IllegalIndentationException (line 34) | public class IllegalIndentationException extends SyntaxException {
    method IllegalIndentationException (line 35) | public IllegalIndentationException(String lineMsg, int _INDENT, LineCo...

FILE: latte-compiler/src/main/java/lt/compiler/lexical/Indent.java
  class Indent (line 6) | public class Indent {
    method Indent (line 11) | public Indent(int indent) {
    method getIndent (line 15) | public int getIndent() {
    method setIndent (line 19) | public void setIndent(int indent) {
    method equals (line 23) | @Override
    method hashCode (line 33) | @Override
    method toString (line 38) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/lexical/Node.java
  class Node (line 35) | public abstract class Node implements Iterator<Node>, Iterable {
    method Node (line 42) | public Node(Args args, TokenType tokenType) {
    method getTokenType (line 56) | public TokenType getTokenType() {
    method hasNext (line 60) | public boolean hasNext() {
    method hasPrevious (line 64) | public boolean hasPrevious() {
    method getLineCol (line 68) | public LineCol getLineCol() {
    method setLineCol (line 72) | public void setLineCol(LineCol lineCol) {
    method next (line 76) | public Node next() {
    method previous (line 80) | public Node previous() {
    method setNext (line 84) | public void setNext(Node next) {
    method setPrevious (line 88) | public void setPrevious(Node previous) {
    method equals (line 92) | @Override
    method iterator (line 102) | @Override
    method toString (line 107) | public abstract String toString(int indent);
    method equalsIgnoreIndent (line 109) | public boolean equalsIgnoreIndent(Node o) {

FILE: latte-compiler/src/main/java/lt/compiler/lexical/PairEntry.java
  class PairEntry (line 30) | public class PairEntry {
    method PairEntry (line 34) | public PairEntry(String key, ElementStartNode startNode) {

FILE: latte-compiler/src/main/java/lt/compiler/lexical/TokenType.java
  type TokenType (line 30) | public enum TokenType {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/ConstantValue.java
  type ConstantValue (line 30) | public interface ConstantValue extends Value {
    method getByte (line 31) | byte[] getByte();

FILE: latte-compiler/src/main/java/lt/compiler/semantic/DummyValue.java
  class DummyValue (line 6) | public class DummyValue implements Value {
    method DummyValue (line 9) | public DummyValue(STypeDef aType) {
    method type (line 13) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/ExceptionTable.java
  class ExceptionTable (line 30) | public class ExceptionTable {
    method ExceptionTable (line 36) | public ExceptionTable(Instruction from, Instruction to, Instruction ta...
    method getTo (line 43) | public Instruction getTo() {
    method getFrom (line 47) | public Instruction getFrom() {
    method getTarget (line 51) | public Instruction getTarget() {
    method getType (line 55) | public STypeDef getType() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/Ins.java
  class Ins (line 38) | public class Ins {
    method Ins (line 39) | private Ins() {
    class ANewArray (line 45) | public static class ANewArray implements Value {
      method ANewArray (line 51) | public ANewArray(SArrayTypeDef arrayType, STypeDef componentType, In...
      method type (line 57) | @Override
      method componentType (line 62) | public STypeDef componentType() {
      method count (line 66) | public IntValue count() {
      method initValues (line 70) | public List<Value> initValues() {
    class ArrayLength (line 78) | public static class ArrayLength implements Value, Instruction, ReadOnly {
      method ArrayLength (line 82) | public ArrayLength(Value arrayValue, LineCol lineCol) {
      method arrayValue (line 87) | public Value arrayValue() {
      method line_col (line 91) | @Override
      method type (line 96) | @Override
    class AThrow (line 105) | public static class AThrow implements Instruction {
      method AThrow (line 109) | public AThrow(Value exception, LineCol lineCol) {
      method line_col (line 114) | @Override
      method exception (line 119) | public Value exception() {
    class Cast (line 127) | public static class Cast implements Value, Instruction {
      method Cast (line 154) | public Cast(STypeDef type, Value value, int castMode, LineCol lineCo...
      method line_col (line 161) | @Override
      method type (line 166) | @Override
      method value (line 171) | public Value value() {
      method castMode (line 175) | public int castMode() {
    class CheckCast (line 183) | public static class CheckCast implements Instruction, Value {
      method CheckCast (line 188) | public CheckCast(Value theValueToCheck, STypeDef requiredType, LineC...
      method theValueToCheck (line 194) | public Value theValueToCheck() {
      method line_col (line 198) | @Override
      method type (line 203) | @Override
    class ExStore (line 213) | public static class ExStore implements Instruction {
      method ExStore (line 217) | public ExStore(LeftValue ex, SemanticScope scope) {
      method line_col (line 222) | @Override
      method leftValue (line 227) | public LeftValue leftValue() {
      method getScope (line 231) | public SemanticScope getScope() {
    class GetClass (line 239) | public static class GetClass implements Value, ReadOnly {
      method GetClass (line 247) | public GetClass(STypeDef targetType, SClassDef classClassDef) {
      method type (line 257) | @Override
      method targetType (line 267) | public STypeDef targetType() {
    class GetField (line 275) | public static class GetField implements Value, Instruction, ReadOnly {
      method GetField (line 280) | public GetField(SFieldDef field, Value object, LineCol lineCol) {
      method object (line 286) | public Value object() {
      method line_col (line 290) | @Override
      method type (line 295) | @Override
      method field (line 300) | public SFieldDef field() {
      method toString (line 304) | @Override
    class GetStatic (line 313) | public static class GetStatic implements Value, Instruction, ReadOnly {
      method GetStatic (line 317) | public GetStatic(SFieldDef field, LineCol lineCol) {
      method line_col (line 322) | @Override
      method type (line 327) | @Override
      method field (line 332) | public SFieldDef field() {
    class Goto (line 340) | public static class Goto implements Instruction {
      method Goto (line 343) | public Goto(Instruction gotoIns) {
      method line_col (line 347) | @Override
      method gotoIns (line 352) | public Instruction gotoIns() {
    class IfACmpNe (line 360) | public static class IfACmpNe implements Instruction {
      method IfACmpNe (line 366) | public IfACmpNe(Value value1, Value value2, Instruction gotoIns, Lin...
      method value1 (line 373) | public Value value1() {
      method value2 (line 377) | public Value value2() {
      method gotoIns (line 381) | public Instruction gotoIns() {
      method line_col (line 385) | @Override
    class IfEq (line 394) | public static class IfEq implements Instruction {
      method IfEq (line 399) | public IfEq(Value condition, Instruction gotoIns, LineCol lineCol) {
      method line_col (line 405) | @Override
      method condition (line 410) | public Value condition() {
      method gotoIns (line 414) | public Instruction gotoIns() {
    class IfNe (line 422) | public static class IfNe implements Instruction {
      method IfNe (line 427) | public IfNe(Value condition, Instruction gotoIns, LineCol lineCol) {
      method line_col (line 433) | @Override
      method condition (line 438) | public Value condition() {
      method gotoIns (line 442) | public Instruction gotoIns() {
      method setGotoIns (line 446) | public void setGotoIns(Instruction gotoIns) {
    class IfNonNull (line 454) | public static class IfNonNull implements Instruction {
      method IfNonNull (line 459) | public IfNonNull(Value object, Instruction gotoIns, LineCol lineCol) {
      method object (line 465) | public Value object() {
      method gotoIns (line 469) | public Instruction gotoIns() {
      method line_col (line 473) | @Override
    class IfNull (line 482) | public static class IfNull implements Instruction {
      method IfNull (line 487) | public IfNull(Value object, Instruction gotoIns, LineCol lineCol) {
      method object (line 493) | public Value object() {
      method gotoIns (line 497) | public Instruction gotoIns() {
      method line_col (line 501) | @Override
    class InstanceOf (line 510) | public static class InstanceOf implements Instruction, Value {
      method InstanceOf (line 515) | public InstanceOf(Value object, GetClass aClass, LineCol lineCol) {
      method type (line 521) | @Override
      method line_col (line 526) | @Override
      method object (line 531) | public Value object() {
      method aClass (line 535) | public GetClass aClass() {
    class Invoke (line 543) | public abstract static class Invoke implements Instruction, Value {
      method Invoke (line 549) | public Invoke(SInvokable invokable, LineCol lineCol) {
      method setInvokable (line 554) | public void setInvokable(SInvokable invokable) {
      method invokable (line 558) | public SInvokable invokable() {
      method arguments (line 562) | public List<Value> arguments() {
      method line_col (line 566) | @Override
      method type (line 571) | @Override
    class InvokeInterface (line 580) | public static class InvokeInterface extends InvokeWithTarget {
      method InvokeInterface (line 581) | public InvokeInterface(Value target, SInvokable invokable, LineCol l...
    class InvokeSpecial (line 589) | public static class InvokeSpecial extends InvokeWithTarget {
      method InvokeSpecial (line 590) | public InvokeSpecial(Value target, SInvokable invokable, LineCol lin...
    class InvokeStatic (line 598) | public static class InvokeStatic extends Invoke {
      method InvokeStatic (line 599) | public InvokeStatic(SInvokable invokable, LineCol lineCol) {
    class InvokeVirtual (line 607) | public static class InvokeVirtual extends InvokeWithTarget {
      method InvokeVirtual (line 610) | public InvokeVirtual(Value target, SInvokable invokable, LineCol lin...
    class InvokeWithCapture (line 618) | public static class InvokeWithCapture extends InvokeWithTarget {
      method InvokeWithCapture (line 622) | public InvokeWithCapture(Value target, SInvokable invokable, boolean...
      method capturedArguments (line 627) | public List<Value> capturedArguments() {
      method isStatic (line 631) | public boolean isStatic() {
    class InvokeWithTarget (line 639) | public abstract static class InvokeWithTarget extends Invoke implement...
      method InvokeWithTarget (line 642) | public InvokeWithTarget(Value target, SInvokable invokable, LineCol ...
      method setTarget (line 647) | public void setTarget(Value target) {
      method target (line 651) | public Value target() {
    class PointerGetCastHelper (line 659) | public static class PointerGetCastHelper implements Instruction, Value {
      method PointerGetCastHelper (line 663) | public PointerGetCastHelper(Value valueAfterCast, InvokeVirtual valu...
      method after (line 668) | public Value after() {
      method before (line 672) | public InvokeVirtual before() {
      method type (line 676) | @Override
      method line_col (line 681) | @Override
    class LogicAnd (line 690) | public static class LogicAnd implements Value, Instruction {
      method LogicAnd (line 695) | public LogicAnd(Value b1, Value b2, LineCol lineCol) {
      method b1 (line 701) | public Value b1() {
      method b2 (line 705) | public Value b2() {
      method line_col (line 709) | @Override
      method type (line 714) | @Override
    class LogicOr (line 723) | public static class LogicOr implements Value, Instruction {
      method LogicOr (line 730) | public LogicOr(SMethodDef castToBool, Value v1, Value v2, STypeDef t...
      method getCastToBool (line 738) | public SMethodDef getCastToBool() {
      method v1 (line 742) | public Value v1() {
      method v2 (line 746) | public Value v2() {
      method line_col (line 750) | @Override
      method type (line 755) | @Override
    class MonitorEnter (line 764) | public static class MonitorEnter implements Instruction {
      method MonitorEnter (line 770) | public MonitorEnter(Value valueToMonitor, SemanticScope scope, LineC...
      method line_col (line 779) | @Override
      method valueToMonitor (line 784) | public Value valueToMonitor() {
      method leftValue (line 788) | public LeftValue leftValue() {
      method getScope (line 792) | public SemanticScope getScope() {
    class MonitorExit (line 800) | public static class MonitorExit implements Instruction {
      method MonitorExit (line 804) | public MonitorExit(MonitorEnter enterInstruction) {
      method line_col (line 809) | @Override
      method enterInstruction (line 814) | public MonitorEnter enterInstruction() {
    class New (line 822) | public static class New implements Value, Instruction {
      method New (line 828) | public New(SConstructorDef constructor, LineCol lineCol) {
      method constructor (line 833) | public SConstructorDef constructor() {
      method args (line 837) | public List<Value> args() {
      method line_col (line 841) | @Override
      method type (line 846) | @Override
    class NewArray (line 855) | public static class NewArray implements Value {
      method NewArray (line 871) | public NewArray(IntValue count, int mode, int storeMode, STypeDef ty...
      method type (line 878) | @Override
      method mode (line 883) | public int mode() {
      method count (line 887) | public IntValue count() {
      method storeMode (line 891) | public int storeMode() {
      method initValues (line 895) | public List<Value> initValues() {
    class NewList (line 903) | public static class NewList implements Value {
      method NewList (line 907) | public NewList(STypeDef linkedListType) {
      method type (line 911) | @Override
      method initValues (line 916) | public List<Value> initValues() {
    class NewMap (line 924) | public static class NewMap implements Value {
      method NewMap (line 928) | public NewMap(STypeDef linkedListClass) {
      method type (line 932) | @Override
      method initValues (line 937) | public LinkedHashMap<Value, Value> initValues() {
    class Nop (line 945) | public static class Nop implements Instruction {
      method line_col (line 946) | @Override
    class OneVarOp (line 955) | public static class OneVarOp implements Value, Instruction {
      method OneVarOp (line 966) | public OneVarOp(Value value, int op, STypeDef type, LineCol lineCol) {
      method value (line 973) | public Value value() {
      method op (line 977) | public int op() {
      method line_col (line 981) | @Override
      method type (line 986) | @Override
    class Pop (line 995) | public static class Pop implements Instruction {
      method line_col (line 996) | @Override
    class PutField (line 1005) | public static class PutField implements Instruction {
      method PutField (line 1011) | public PutField(SFieldDef field, Value obj, Value value, LineCol lin...
      method value (line 1023) | public Value value() {
      method field (line 1027) | public SFieldDef field() {
      method obj (line 1031) | public Value obj() {
      method line_col (line 1035) | @Override
    class PutStatic (line 1044) | public static class PutStatic implements Instruction {
      method PutStatic (line 1049) | public PutStatic(SFieldDef field, Value value, LineCol lineCol, Erro...
      method value (line 1060) | public Value value() {
      method field (line 1064) | public SFieldDef field() {
      method line_col (line 1068) | @Override
    class TALoad (line 1077) | public static class TALoad implements Value, Instruction, ReadOnly {
      method TALoad (line 1093) | public TALoad(Value arr, Value index, LineCol lineCol, Map<String, S...
      method line_col (line 1114) | @Override
      method type (line 1119) | @Override
      method arr (line 1136) | public Value arr() {
      method mode (line 1140) | public int mode() {
      method index (line 1144) | public Value index() {
    class TAStore (line 1152) | public static class TAStore implements Instruction {
      method TAStore (line 1168) | public TAStore(Value array, int mode, Value index, Value value, Line...
      method mode (line 1176) | public int mode() {
      method index (line 1180) | public Value index() {
      method array (line 1184) | public Value array() {
      method value (line 1188) | public Value value() {
      method line_col (line 1192) | @Override
    class This (line 1201) | public static class This implements Value, ReadOnly {
      method This (line 1204) | public This(STypeDef type) {
      method type (line 1208) | @Override
    class TLoad (line 1217) | public static class TLoad implements Value, Instruction, ReadOnly {
      method TLoad (line 1229) | public TLoad(LeftValue value, SemanticScope scope, LineCol lineCol) {
      method line_col (line 1252) | @Override
      method type (line 1257) | @Override
      method value (line 1262) | public LeftValue value() {
      method mode (line 1266) | public int mode() {
      method getScope (line 1270) | public SemanticScope getScope() {
    class TReturn (line 1278) | public static class TReturn implements Instruction {
      method TReturn (line 1290) | public TReturn(Value value, LineCol lineCol) {
      method setReturnValue (line 1308) | public void setReturnValue(Value value) {
      method line_col (line 1312) | @Override
      method value (line 1317) | public Value value() {
      method returnIns (line 1321) | public int returnIns() {
    class TStore (line 1329) | public static class TStore implements Instruction {
      method TStore (line 1344) | public TStore(LeftValue leftValue, Value newValue, SemanticScope sco...
      method line_col (line 1369) | @Override
      method newValue (line 1374) | public Value newValue() {
      method leftValue (line 1378) | @SuppressWarnings("unused")
      method mode (line 1383) | public int mode() {
      method getScope (line 1387) | public SemanticScope getScope() {
    class TwoVarOp (line 1395) | public static class TwoVarOp implements Value, Instruction {
      method TwoVarOp (line 1451) | public TwoVarOp(Value a, Value b, int op, STypeDef resultType, LineC...
      method line_col (line 1459) | @Override
      method type (line 1464) | @Override
      method a (line 1469) | public Value a() {
      method b (line 1473) | public Value b() {
      method op (line 1477) | public int op() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/Instruction.java
  type Instruction (line 34) | public interface Instruction extends Serializable {
    method line_col (line 35) | LineCol line_col();

FILE: latte-compiler/src/main/java/lt/compiler/semantic/InvokableMeta.java
  class InvokableMeta (line 9) | public class InvokableMeta {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/LeftValue.java
  type LeftValue (line 30) | public interface LeftValue extends Value {
    method canChange (line 36) | boolean canChange();
    method alreadyAssigned (line 43) | boolean alreadyAssigned();
    method assign (line 48) | void assign();
    method isUsed (line 55) | boolean isUsed();
    method setUsed (line 62) | void setUsed(boolean used);

FILE: latte-compiler/src/main/java/lt/compiler/semantic/LocalVariable.java
  class LocalVariable (line 30) | public class LocalVariable implements LeftValue {
    method LocalVariable (line 39) | public LocalVariable(STypeDef type, boolean canChange) {
    method setType (line 44) | public void setType(STypeDef type) {
    method canChange (line 48) | @Override
    method alreadyAssigned (line 53) | @Override
    method assign (line 58) | @Override
    method isUsed (line 64) | @Override
    method setUsed (line 69) | @Override
    method type (line 74) | @Override
    method toString (line 79) | @Override
    method getWrappingParam (line 88) | public SParameter getWrappingParam() {
    method setWrappingParam (line 92) | public void setWrappingParam(SParameter wrappingParam) {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/MethodTypeValue.java
  class MethodTypeValue (line 32) | public class MethodTypeValue implements Value {
    method MethodTypeValue (line 44) | public MethodTypeValue(List<STypeDef> parameters, STypeDef returnType,...
    method parameters (line 50) | public List<STypeDef> parameters() {
    method returnType (line 54) | public STypeDef returnType() {
    method type (line 58) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/PointerType.java
  class PointerType (line 8) | public class PointerType extends STypeDef {
    method PointerType (line 11) | public PointerType(STypeDef pointingType) {
    method getPointingType (line 18) | public STypeDef getPointingType() {
    method toString (line 22) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/PrimitiveTypeDef.java
  class PrimitiveTypeDef (line 35) | public abstract class PrimitiveTypeDef extends STypeDef {
    method PrimitiveTypeDef (line 37) | public PrimitiveTypeDef() {
    method annos (line 41) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/PrimitiveValue.java
  type PrimitiveValue (line 30) | public interface PrimitiveValue extends Value {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/ReadOnly.java
  type ReadOnly (line 30) | public interface ReadOnly {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SAnno.java
  class SAnno (line 33) | public class SAnno implements Value {
    method setAnnoDef (line 39) | public void setAnnoDef(SAnnoDef annoDef) {
    method setPresent (line 43) | public void setPresent(SAnnotationPresentable present) {
    method type (line 47) | @Override
    method values (line 52) | public Map<SAnnoField, Value> values() {
    method present (line 56) | public SAnnotationPresentable present() {
    method toString (line 60) | @Override
    method alreadyCompiledAnnotationValueMap (line 78) | public Map<String, Object> alreadyCompiledAnnotationValueMap() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SAnnoDef.java
  class SAnnoDef (line 41) | public class SAnnoDef extends STypeDef {
    method SAnnoDef (line 45) | public SAnnoDef(LineCol lineCol) {
    method annoFields (line 49) | public List<SAnnoField> annoFields() {
    method modifiers (line 53) | public List<SModifier> modifiers() {
    method canPresentOn (line 57) | public boolean canPresentOn(ElementType type) throws SyntaxException {
    method toString (line 102) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SAnnoField.java
  class SAnnoField (line 32) | public class SAnnoField extends SMethodDef {
    method SAnnoField (line 37) | public SAnnoField() {
    method setDefaultValue (line 41) | public void setDefaultValue(Value defaultValue) {
    method setName (line 45) | public void setName(String name) {
    method setType (line 49) | public void setType(STypeDef type) {
    method name (line 53) | public String name() {
    method type (line 57) | public STypeDef type() {
    method defaultValue (line 61) | public Value defaultValue() {
    method doesHaveDefaultValue (line 65) | public void doesHaveDefaultValue() {
    method hasDefaultValue (line 69) | public boolean hasDefaultValue() {
    method toString (line 73) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SAnnotationPresentable.java
  type SAnnotationPresentable (line 32) | public interface SAnnotationPresentable {
    method annos (line 33) | List<SAnno> annos();

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SArrayTypeDef.java
  class SArrayTypeDef (line 36) | public class SArrayTypeDef extends STypeDef {
    method SArrayTypeDef (line 40) | public SArrayTypeDef() {
    method setDimension (line 44) | public void setDimension(int dimension) {
    method setType (line 49) | public void setType(STypeDef type) {
    method type (line 53) | public STypeDef type() {
    method annos (line 57) | @Override
    method dimension (line 62) | public int dimension() {
    method fullName (line 66) | @Override
    method rebuildFullName (line 75) | private void rebuildFullName() {
    method toString (line 105) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SArrayValue.java
  class SArrayValue (line 32) | public class SArrayValue implements Value {
    method setDimension (line 37) | public void setDimension(int dimension) {
    method setType (line 41) | public void setType(SArrayTypeDef type) {
    method setValues (line 45) | public void setValues(Value[] values) {
    method dimension (line 49) | public int dimension() {
    method length (line 53) | public int length() {
    method values (line 57) | public Value[] values() {
    method type (line 61) | @Override
    method toString (line 66) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SClassDef.java
  class SClassDef (line 35) | public class SClassDef extends SRefTypeDef {
    method SClassDef (line 49) | public SClassDef(int type, LineCol lineCol) {
    method setParent (line 55) | public void setParent(SClassDef parent) {
    method constructors (line 59) | public List<SConstructorDef> constructors() {
    method parent (line 63) | public SClassDef parent() {
    method superInterfaces (line 67) | public List<SInterfaceDef> superInterfaces() {
    method staticStatements (line 71) | public List<Instruction> staticStatements() {
    method staticExceptionTable (line 75) | public List<ExceptionTable> staticExceptionTable() {
    method isDataClass (line 79) | public boolean isDataClass() {
    method setIsDataClass (line 83) | public void setIsDataClass(boolean isDataClass) {
    method classType (line 87) | public int classType() {
    method staticMeta (line 91) | public InvokableMeta staticMeta() {
    method toString (line 95) | @Override
    method isAssignableFrom (line 117) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SConstructorDef.java
  class SConstructorDef (line 32) | public class SConstructorDef extends SInvokable {
    method SConstructorDef (line 33) | public SConstructorDef(LineCol lineCol) {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SFieldDef.java
  class SFieldDef (line 32) | public class SFieldDef extends SMember implements LeftValue {
    method SFieldDef (line 38) | public SFieldDef(LineCol lineCol) {
    method setName (line 42) | public void setName(String name) {
    method setType (line 46) | public void setType(STypeDef type) {
    method name (line 50) | public String name() {
    method canChange (line 54) | @Override
    method alreadyAssigned (line 59) | @Override
    method assign (line 64) | @Override
    method isUsed (line 70) | @Override
    method setUsed (line 75) | @Override
    method type (line 80) | @Override
    method toString (line 85) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SInterfaceDef.java
  class SInterfaceDef (line 34) | public class SInterfaceDef extends SRefTypeDef {
    method SInterfaceDef (line 41) | public SInterfaceDef(LineCol lineCol) {
    method superInterfaces (line 45) | public List<SInterfaceDef> superInterfaces() {
    method staticStatements (line 49) | public List<Instruction> staticStatements() {
    method staticExceptionTable (line 53) | public List<ExceptionTable> staticExceptionTable() {
    method staticMeta (line 57) | public InvokableMeta staticMeta() {
    method toString (line 61) | @Override
    method isAssignableFrom (line 83) | public boolean isAssignableFrom(STypeDef cls) {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SInvokable.java
  class SInvokable (line 35) | abstract public class SInvokable extends SMember {
    method SInvokable (line 42) | public SInvokable(LineCol lineCol) {
    method setReturnType (line 46) | public void setReturnType(STypeDef returnType) {
    method getParameters (line 50) | public List<SParameter> getParameters() {
    method getReturnType (line 54) | public STypeDef getReturnType() {
    method statements (line 58) | public List<Instruction> statements() {
    method exceptionTables (line 62) | public List<ExceptionTable> exceptionTables() {
    method meta (line 66) | public InvokableMeta meta() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SMember.java
  class SMember (line 35) | abstract public class SMember implements SAnnotationPresentable {
    method SMember (line 41) | public SMember(LineCol lineCol) {
    method setDeclaringType (line 45) | public void setDeclaringType(STypeDef declaringType) {
    method modifiers (line 49) | public List<SModifier> modifiers() {
    method declaringType (line 53) | public STypeDef declaringType() {
    method annos (line 57) | @Override
    method line_col (line 62) | public LineCol line_col() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SMethodDef.java
  class SMethodDef (line 35) | public class SMethodDef extends SInvokable {
    method SMethodDef (line 40) | public SMethodDef(LineCol lineCol) {
    method setName (line 44) | public void setName(String name) {
    method name (line 48) | public String name() {
    method overRide (line 52) | public List<SMethodDef> overRide() {
    method overridden (line 56) | public List<SMethodDef> overridden() {
    method toString (line 60) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SModifier.java
  type SModifier (line 30) | public enum SModifier {
    method SModifier (line 47) | SModifier(int flag) {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SParameter.java
  class SParameter (line 33) | public class SParameter implements LeftValue, SAnnotationPresentable {
    method setTarget (line 44) | public void setTarget(SInvokable target) {
    method setName (line 48) | public void setName(String name) {
    method setType (line 52) | public void setType(STypeDef type) {
    method setCanChange (line 56) | public void setCanChange(boolean canChange) {
    method isNotNull (line 60) | public boolean isNotNull() {
    method setNotNull (line 64) | public void setNotNull(boolean notNull) {
    method isNotEmpty (line 68) | public boolean isNotEmpty() {
    method setNotEmpty (line 72) | public void setNotEmpty(boolean notEmpty) {
    method name (line 76) | public String name() {
    method canChange (line 80) | @Override
    method alreadyAssigned (line 85) | @Override
    method assign (line 90) | @Override
    method annos (line 96) | @Override
    method type (line 101) | @Override
    method target (line 106) | public SInvokable target() {
    method toString (line 110) | @Override
    method setUsed (line 118) | @Override
    method isUsed (line 123) | @Override
    method isCapture (line 133) | public boolean isCapture() {
    method setCapture (line 142) | public void setCapture(boolean capture) {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/SRefTypeDef.java
  class SRefTypeDef (line 11) | public abstract class SRefTypeDef extends STypeDef {
    method SRefTypeDef (line 16) | public SRefTypeDef(LineCol lineCol) {
    method fields (line 20) | public List<SFieldDef> fields() {
    method methods (line 24) | public List<SMethodDef> methods() {
    method modifiers (line 28) | public List<SModifier> modifiers() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/STypeDef.java
  class STypeDef (line 36) | public class STypeDef implements SAnnotationPresentable {
    method STypeDef (line 42) | public STypeDef(LineCol lineCol) {
    method setFullName (line 46) | public void setFullName(String fullName) {
    method setPkg (line 50) | public void setPkg(String pkg) {
    method fullName (line 54) | public String fullName() {
    method annos (line 58) | @Override
    method pkg (line 63) | public String pkg() {
    method isAssignableFrom (line 67) | public boolean isAssignableFrom(STypeDef cls) {
    method line_col (line 74) | public LineCol line_col() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/Value.java
  type Value (line 32) | public interface Value extends Serializable {
    method type (line 33) | STypeDef type();

FILE: latte-compiler/src/main/java/lt/compiler/semantic/ValueAnotherType.java
  class ValueAnotherType (line 8) | public class ValueAnotherType implements Value, Instruction {
    method ValueAnotherType (line 13) | public ValueAnotherType(STypeDef type, Value value, LineCol lineCol) {
    method type (line 19) | @Override
    method value (line 24) | public Value value() {
    method line_col (line 28) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/ValuePack.java
  class ValuePack (line 35) | public class ValuePack implements Value, Instruction {
    method ValuePack (line 40) | public ValuePack(boolean autoPop) {
    method autoPop (line 44) | public boolean autoPop() {
    method setType (line 48) | public void setType(STypeDef type) {
    method line_col (line 52) | @Override
    method type (line 57) | @Override
    method instructions (line 72) | public List<Instruction> instructions() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/VoidType.java
  class VoidType (line 35) | public class VoidType extends STypeDef {
    method VoidType (line 36) | private VoidType() {
    method get (line 42) | public static VoidType get() {
    method fullName (line 46) | @Override
    method annos (line 51) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/BoolTypeDef.java
  class BoolTypeDef (line 32) | public class BoolTypeDef extends PrimitiveTypeDef {
    method BoolTypeDef (line 33) | private BoolTypeDef() {
    method get (line 38) | public static BoolTypeDef get() {
    method fullName (line 42) | @Override
    method toString (line 47) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/BoolValue.java
  class BoolValue (line 33) | public class BoolValue implements PrimitiveValue {
    method BoolValue (line 36) | public BoolValue(boolean value) {
    method type (line 40) | @Override
    method equals (line 45) | @Override
    method hashCode (line 55) | @Override
    method toString (line 60) | @Override
    method getValue (line 65) | public int getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/ByteTypeDef.java
  class ByteTypeDef (line 32) | public class ByteTypeDef extends PrimitiveTypeDef {
    method ByteTypeDef (line 33) | private ByteTypeDef() {
    method get (line 38) | public static ByteTypeDef get() {
    method fullName (line 42) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/ByteValue.java
  class ByteValue (line 33) | public class ByteValue implements PrimitiveValue {
    method ByteValue (line 36) | public ByteValue(byte value) {
    method type (line 40) | @Override
    method equals (line 45) | @Override
    method hashCode (line 55) | @Override
    method toString (line 60) | @Override
    method getValue (line 65) | public int getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/CharTypeDef.java
  class CharTypeDef (line 32) | public class CharTypeDef extends PrimitiveTypeDef {
    method CharTypeDef (line 33) | private CharTypeDef() {
    method get (line 38) | public static CharTypeDef get() {
    method fullName (line 42) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/CharValue.java
  class CharValue (line 33) | public class CharValue implements PrimitiveValue {
    method CharValue (line 36) | public CharValue(char value) {
    method type (line 40) | @Override
    method equals (line 45) | @Override
    method hashCode (line 55) | @Override
    method toString (line 60) | @Override
    method getValue (line 65) | public int getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/DoubleTypeDef.java
  class DoubleTypeDef (line 33) | public class DoubleTypeDef extends PrimitiveTypeDef {
    method DoubleTypeDef (line 34) | private DoubleTypeDef() {
    method get (line 39) | public static DoubleTypeDef get() {
    method fullName (line 43) | @Override
    method isAssignableFrom (line 48) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/DoubleValue.java
  class DoubleValue (line 34) | public class DoubleValue implements PrimitiveValue, ConstantValue {
    method DoubleValue (line 37) | public DoubleValue(double value) {
    method type (line 41) | @Override
    method equals (line 46) | @Override
    method hashCode (line 56) | @Override
    method getByte (line 62) | @Override
    method toString (line 77) | @Override
    method getValue (line 82) | public double getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/EnumValue.java
  class EnumValue (line 33) | public class EnumValue implements Value {
    method setType (line 37) | public void setType(STypeDef type) {
    method setEnumStr (line 41) | public void setEnumStr(String enumStr) {
    method type (line 45) | @Override
    method enumStr (line 50) | public String enumStr() {
    method toString (line 54) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/FloatTypeDef.java
  class FloatTypeDef (line 33) | public class FloatTypeDef extends PrimitiveTypeDef {
    method FloatTypeDef (line 34) | private FloatTypeDef() {
    method get (line 39) | public static FloatTypeDef get() {
    method fullName (line 43) | @Override
    method isAssignableFrom (line 48) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/FloatValue.java
  class FloatValue (line 34) | public class FloatValue implements PrimitiveValue, ConstantValue {
    method FloatValue (line 37) | public FloatValue(float value) {
    method type (line 41) | @Override
    method equals (line 46) | @Override
    method hashCode (line 56) | @Override
    method getByte (line 61) | @Override
    method toString (line 72) | @Override
    method getValue (line 77) | public float getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/IntTypeDef.java
  class IntTypeDef (line 33) | public class IntTypeDef extends PrimitiveTypeDef {
    method IntTypeDef (line 34) | private IntTypeDef() {
    method get (line 39) | public static IntTypeDef get() {
    method fullName (line 43) | @Override
    method isAssignableFrom (line 48) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/IntValue.java
  class IntValue (line 34) | public class IntValue implements PrimitiveValue, ConstantValue {
    method IntValue (line 37) | public IntValue(int value) {
    method type (line 41) | @Override
    method equals (line 46) | @Override
    method hashCode (line 56) | @Override
    method getByte (line 61) | @Override
    method toString (line 71) | @Override
    method getValue (line 76) | public int getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/LongTypeDef.java
  class LongTypeDef (line 33) | public class LongTypeDef extends PrimitiveTypeDef {
    method LongTypeDef (line 34) | private LongTypeDef() {
    method get (line 39) | public static LongTypeDef get() {
    method fullName (line 43) | @Override
    method isAssignableFrom (line 48) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/LongValue.java
  class LongValue (line 34) | public class LongValue implements PrimitiveValue, ConstantValue {
    method LongValue (line 37) | public LongValue(long value) {
    method type (line 41) | @Override
    method equals (line 46) | @Override
    method hashCode (line 56) | @Override
    method getByte (line 61) | @Override
    method toString (line 75) | @Override
    method getValue (line 80) | public long getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/NullTypeDef.java
  class NullTypeDef (line 37) | public class NullTypeDef extends STypeDef {
    method NullTypeDef (line 38) | private NullTypeDef() {
    method get (line 44) | public static NullTypeDef get() {
    method fullName (line 48) | @Override
    method annos (line 53) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/NullValue.java
  class NullValue (line 33) | public class NullValue implements Value {
    method NullValue (line 34) | private NullValue() {
    method get (line 39) | public static NullValue get() {
    method type (line 43) | @Override
    method toString (line 48) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/ShortTypeDef.java
  class ShortTypeDef (line 32) | public class ShortTypeDef extends PrimitiveTypeDef {
    method ShortTypeDef (line 33) | private ShortTypeDef() {
    method get (line 38) | public static ShortTypeDef get() {
    method fullName (line 42) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/ShortValue.java
  class ShortValue (line 33) | public class ShortValue implements PrimitiveValue {
    method ShortValue (line 36) | public ShortValue(short value) {
    method type (line 40) | @Override
    method equals (line 45) | @Override
    method hashCode (line 55) | @Override
    method toString (line 60) | @Override
    method getValue (line 65) | public int getValue() {

FILE: latte-compiler/src/main/java/lt/compiler/semantic/builtin/StringConstantValue.java
  class StringConstantValue (line 35) | public class StringConstantValue implements ConstantValue, Value {
    method StringConstantValue (line 39) | public StringConstantValue(String str) {
    method setType (line 43) | public void setType(SClassDef type) {
    method getStr (line 48) | public String getStr() {
    method getByte (line 52) | @Override
    method type (line 57) | @Override
    method equals (line 62) | @Override
    method hashCode (line 73) | @Override
    method toString (line 78) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/helper/ASTGHolder.java
  class ASTGHolder (line 8) | public class ASTGHolder<S extends Statement> {
    method ASTGHolder (line 13) | public ASTGHolder(S s, List<STypeDef> generics) {
    method equals (line 18) | @Override
    method hashCode (line 30) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/semantic/helper/HalfAppliedTypes.java
  class HalfAppliedTypes (line 11) | public class HalfAppliedTypes {
    method doApply (line 15) | private void doApply(Access type) throws SyntaxException {
    method setApply (line 29) | public void setApply(Function1<Void, Access> apply) throws SyntaxExcep...
    method add (line 36) | public void add(Access type) throws SyntaxException {

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/AST.java
  class AST (line 43) | public class AST {
    method AST (line 44) | private AST() {
    class Access (line 50) | public static class Access implements Expression {
      method Access (line 56) | public Access(Expression exp, String name, LineCol lineCol) {
      method toString (line 62) | @Override
      method equals (line 67) | @Override
      method hashCode (line 77) | @Override
      method line_col (line 85) | @Override
      method foreachInnerStatements (line 90) | @Override
    class Anno (line 100) | public static class Anno implements Statement {
      method Anno (line 105) | public Anno(Access anno, List<Assignment> args, LineCol lineCol) {
      method toString (line 111) | @Override
      method equals (line 132) | @Override
      method hashCode (line 144) | @Override
      method line_col (line 151) | @Override
      method foreachInnerStatements (line 156) | @Override
    class AnnoExpression (line 166) | public static class AnnoExpression implements Expression {
      method AnnoExpression (line 169) | public AnnoExpression(Anno anno) {
      method line_col (line 173) | @Override
      method foreachInnerStatements (line 178) | @Override
      method equals (line 183) | @Override
      method hashCode (line 193) | @Override
      method toString (line 198) | @Override
    class ArrayExp (line 207) | public static class ArrayExp implements Expression {
      method ArrayExp (line 211) | public ArrayExp(List<Expression> list, LineCol lineCol) {
      method toString (line 216) | @Override
      method equals (line 232) | @Override
      method hashCode (line 242) | @Override
      method line_col (line 247) | @Override
      method foreachInnerStatements (line 252) | @Override
    class Assignment (line 261) | public static class Assignment implements Expression {
      method Assignment (line 267) | public Assignment(Access assignTo, String op, Expression assignFrom,...
      method toString (line 274) | @Override
      method equals (line 279) | @Override
      method hashCode (line 292) | @Override
      method line_col (line 300) | @Override
      method foreachInnerStatements (line 305) | @Override
    class AsType (line 316) | public static class AsType implements Expression {
      method AsType (line 321) | public AsType(Expression exp, Access type, LineCol lineCol) {
      method toString (line 327) | @Override
      method equals (line 332) | @Override
      method hashCode (line 344) | @Override
      method line_col (line 351) | @Override
      method foreachInnerStatements (line 356) | @Override
    class Destruct (line 363) | public static class Destruct implements Expression {
      method Destruct (line 370) | public Destruct(Set<Modifier> modifiers, Set<Anno> annos, Pattern_De...
      method line_col (line 378) | @Override
      method foreachInnerStatements (line 383) | @Override
      method equals (line 391) | @Override
      method hashCode (line 406) | @Override
      method toString (line 415) | @Override
    class Pattern (line 424) | public abstract static class Pattern implements Statement, Serializable {
      method Pattern (line 427) | public Pattern(PatternType patternType) {
      method equals (line 431) | @Override
      method hashCode (line 442) | @Override
      method toString (line 447) | @Override
      method line_col (line 452) | @Override
    class Pattern_Default (line 458) | public static class Pattern_Default extends Pattern {
      method get (line 461) | public static Pattern_Default get() {
      method Pattern_Default (line 465) | private Pattern_Default() {
      method toString (line 469) | @Override
      method foreachInnerStatements (line 474) | @Override
    class Pattern_Type (line 484) | public static class Pattern_Type extends Pattern {
      method Pattern_Type (line 487) | public Pattern_Type(Access type) {
      method equals (line 492) | @Override
      method hashCode (line 504) | @Override
      method toString (line 511) | @Override
      method foreachInnerStatements (line 516) | @Override
    class Pattern_Value (line 525) | public static class Pattern_Value extends Pattern {
      method Pattern_Value (line 528) | public Pattern_Value(Expression exp) {
      method equals (line 533) | @Override
      method hashCode (line 545) | @Override
      method toString (line 552) | @Override
      method foreachInnerStatements (line 557) | @Override
    class Pattern_Destruct (line 567) | public static class Pattern_Destruct extends Pattern {
      method Pattern_Destruct (line 571) | public Pattern_Destruct(Access type, List<Pattern> subPatterns) {
      method equals (line 577) | @Override
      method hashCode (line 591) | @Override
      method toString (line 599) | @Override
      method foreachInnerStatements (line 604) | @Override
    class Pattern_Define (line 611) | public static class Pattern_Define extends Pattern {
      method Pattern_Define (line 615) | public Pattern_Define(String name, Access type) {
      method equals (line 621) | @Override
      method hashCode (line 635) | @Override
      method toString (line 643) | @Override
      method foreachInnerStatements (line 648) | @Override
    type PatternType (line 654) | public enum PatternType {
    class PatternCondition (line 658) | public static class PatternCondition implements Statement {
      method PatternCondition (line 662) | public PatternCondition(Pattern pattern, Expression condition) {
      method equals (line 667) | @Override
      method hashCode (line 680) | @Override
      method toString (line 687) | @Override
      method line_col (line 692) | @Override
      method foreachInnerStatements (line 697) | @Override
    class PatternMatching (line 707) | public static class PatternMatching implements Expression {
      method PatternMatching (line 712) | public PatternMatching(Expression expToMatch, LinkedHashMap<PatternC...
      method line_col (line 718) | @Override
      method foreachInnerStatements (line 723) | @Override
      method equals (line 732) | @Override
      method hashCode (line 745) | @Override
      method toString (line 752) | @Override
    class Procedure (line 762) | public static class Procedure implements Expression {
      method Procedure (line 766) | public Procedure(List<Statement> statements, LineCol lineCol) {
      method toString (line 771) | @Override
      method equals (line 776) | @Override
      method hashCode (line 786) | @Override
      method line_col (line 791) | @Override
      method foreachInnerStatements (line 796) | @Override
    class For (line 805) | public static class For implements Statement {
      method For (line 811) | public For(String name, Expression exp, List<Statement> body, LineCo...
      method toString (line 818) | @Override
      method equals (line 823) | @Override
      method hashCode (line 833) | @Override
      method line_col (line 841) | @Override
      method foreachInnerStatements (line 846) | @Override
    class GeneratorSpec (line 856) | public static class GeneratorSpec implements Expression {
      method GeneratorSpec (line 861) | public GeneratorSpec(Access type, List<Statement> ast, LineCol lineC...
      method line_col (line 867) | @Override
      method foreachInnerStatements (line 872) | @Override
      method equals (line 878) | @Override
      method hashCode (line 890) | @Override
      method toString (line 897) | @Override
    class If (line 906) | public static class If implements Statement {
      class IfPair (line 907) | public static class IfPair implements Statement {
        method IfPair (line 912) | public IfPair(Expression condition, List<Statement> body, LineCol ...
        method equals (line 918) | @Override
        method hashCode (line 928) | @Override
        method line_col (line 935) | @Override
        method foreachInnerStatements (line 940) | @Override
      method If (line 950) | public If(List<IfPair> ifs, LineCol lineCol) {
      method toString (line 955) | @Override
      method line_col (line 977) | @Override
      method foreachInnerStatements (line 982) | @Override
      method equals (line 987) | @Override
      method hashCode (line 998) | @Override
    class Index (line 1007) | public static class Index implements Expression {
      method Index (line 1012) | public Index(Expression exp, List<Expression> args, LineCol lineCol) {
      method toString (line 1018) | @Override
      method equals (line 1034) | @Override
      method hashCode (line 1046) | @Override
      method line_col (line 1053) | @Override
      method foreachInnerStatements (line 1058) | @Override
    class Invocation (line 1068) | public static class Invocation implements Expression {
      method Invocation (line 1074) | public Invocation(Expression exp, List<Expression> args, boolean inv...
      method toString (line 1081) | @Override
      method equals (line 1100) | @Override
      method hashCode (line 1113) | @Override
      method line_col (line 1121) | @Override
      method foreachInnerStatements (line 1126) | @Override
    class Lambda (line 1136) | public static class Lambda implements Expression {
      method Lambda (line 1141) | public Lambda(List<VariableDef> params, List<Statement> statements, ...
      method toString (line 1147) | @Override
      method equals (line 1163) | @Override
      method hashCode (line 1173) | @Override
      method line_col (line 1180) | @Override
      method foreachInnerStatements (line 1185) | @Override
    class MapExp (line 1195) | public static class MapExp implements Expression {
      method MapExp (line 1199) | public MapExp(LinkedHashMap<Expression, Expression> map, LineCol lin...
      method toString (line 1204) | @Override
      method equals (line 1220) | @Override
      method hashCode (line 1231) | @Override
      method line_col (line 1236) | @Override
      method foreachInnerStatements (line 1241) | @Override
    class New (line 1251) | public static class New implements Expression {
      method New (line 1255) | public New(Invocation invocation, LineCol lineCol) {
      method line_col (line 1260) | @Override
      method foreachInnerStatements (line 1265) | @Override
      method equals (line 1270) | @Override
      method hashCode (line 1280) | @Override
    class Null (line 1289) | public static class Null implements Expression {
      method Null (line 1292) | public Null(LineCol lineCol) {
      method equals (line 1296) | @Override
      method hashCode (line 1301) | @Override
      method toString (line 1306) | @Override
      method line_col (line 1311) | @Override
      method foreachInnerStatements (line 1316) | @Override
    class PackageRef (line 1325) | public static class PackageRef implements Expression {
      method PackageRef (line 1329) | public PackageRef(String pkg, LineCol lineCol) {
      method toString (line 1334) | @Override
      method equals (line 1339) | @Override
      method hashCode (line 1349) | @Override
      method line_col (line 1354) | @Override
      method foreachInnerStatements (line 1359) | @Override
    class Pass (line 1368) | public static class Pass implements Statement {
      method Pass (line 1371) | public Pass(LineCol lineCol) {
      method equals (line 1375) | @Override
      method hashCode (line 1380) | @Override
      method toString (line 1385) | @Override
      method line_col (line 1390) | @Override
      method foreachInnerStatements (line 1395) | @Override
    class Require (line 1404) | public static class Require implements Expression {
      method Require (line 1408) | public Require(Expression required, LineCol lineCol) {
      method line_col (line 1413) | @Override
      method foreachInnerStatements (line 1418) | @Override
    class Return (line 1427) | public static class Return implements Statement {
      method Return (line 1431) | public Return(Expression exp, LineCol lineCol) {
      method toString (line 1436) | @Override
      method equals (line 1441) | @Override
      method hashCode (line 1451) | @Override
      method line_col (line 1456) | @Override
      method foreachInnerStatements (line 1461) | @Override
    class StaticScope (line 1470) | public static class StaticScope implements Statement {
      method StaticScope (line 1474) | public StaticScope(List<Statement> statements, LineCol lineCol) {
      method toString (line 1479) | @Override
      method equals (line 1484) | @Override
      method hashCode (line 1495) | @Override
      method line_col (line 1500) | @Override
      method foreachInnerStatements (line 1505) | @Override
    class Synchronized (line 1514) | public static class Synchronized implements Statement {
      method Synchronized (line 1519) | public Synchronized(List<Expression> toSync, List<Statement> stateme...
      method toString (line 1525) | @Override
      method equals (line 1541) | @Override
      method hashCode (line 1553) | @Override
      method line_col (line 1560) | @Override
      method foreachInnerStatements (line 1565) | @Override
    class Throw (line 1575) | public static class Throw implements Statement {
      method Throw (line 1579) | public Throw(Expression exp, LineCol lineCol) {
      method toString (line 1584) | @Override
      method equals (line 1589) | @Override
      method hashCode (line 1599) | @Override
      method line_col (line 1604) | @Override
      method foreachInnerStatements (line 1609) | @Override
    class Try (line 1618) | public static class Try implements Statement {
      method Try (line 1625) | public Try(List<Statement> statements, String varName, List<Statemen...
      method toString (line 1633) | @Override
      method equals (line 1638) | @Override
      method hashCode (line 1654) | @Override
      method line_col (line 1663) | @Override
      method foreachInnerStatements (line 1668) | @Override
    class TypeOf (line 1679) | public static class TypeOf implements Expression {
      method TypeOf (line 1683) | public TypeOf(Access type, LineCol lineCol) {
      method toString (line 1688) | @Override
      method equals (line 1693) | @Override
      method hashCode (line 1703) | @Override
      method line_col (line 1708) | @Override
      method foreachInnerStatements (line 1713) | @Override
    class While (line 1722) | public static class While implements Statement {
      method While (line 1728) | public While(Expression condition, List<Statement> statements, boole...
      method toString (line 1735) | @Override
      method equals (line 1747) | @Override
      method hashCode (line 1760) | @Override
      method line_col (line 1768) | @Override
      method foreachInnerStatements (line 1773) | @Override
    class Continue (line 1783) | public static class Continue implements Statement {
      method Continue (line 1786) | public Continue(LineCol lineCol) {
      method line_col (line 1790) | @Override
      method foreachInnerStatements (line 1795) | @Override
    class Break (line 1804) | public static class Break implements Statement {
      method Break (line 1807) | public Break(LineCol lineCol) {
      method line_col (line 1811) | @Override
      method foreachInnerStatements (line 1816) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/Definition.java
  type Definition (line 30) | public interface Definition extends Statement {

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/DuplicateVariableNameException.java
  class DuplicateVariableNameException (line 33) | public class DuplicateVariableNameException extends SyntaxException {
    method DuplicateVariableNameException (line 34) | public DuplicateVariableNameException(String lineMsg, String name, Lin...

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/Expression.java
  type Expression (line 30) | public interface Expression extends Statement {

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/Literal.java
  class Literal (line 32) | public abstract class Literal implements Expression {
    method Literal (line 43) | public Literal(int type, String literal, LineCol lineCol) {
    method type (line 49) | public int type() {
    method literal (line 53) | public String literal() {
    method toString (line 57) | @Override
    method equals (line 62) | @Override
    method hashCode (line 72) | @Override
    method line_col (line 79) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/Operation.java
  type Operation (line 32) | public interface Operation extends Expression {
    method operator (line 38) | String operator();
    method expressions (line 45) | List<Expression> expressions();
    method invokeOn (line 52) | int invokeOn();
    method isUnary (line 59) | boolean isUnary();

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/Pre.java
  type Pre (line 30) | public interface Pre extends Statement {

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/Statement.java
  type Statement (line 35) | public interface Statement extends Serializable {
    method line_col (line 36) | LineCol line_col();
    method foreachInnerStatements (line 46) | <T> void foreachInnerStatements(Function2<Boolean, ? super Statement, ...

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/UnexpectedNewLayerException.java
  class UnexpectedNewLayerException (line 33) | public class UnexpectedNewLayerException extends SyntaxException {
    method UnexpectedNewLayerException (line 34) | public UnexpectedNewLayerException(String lineMsg, LineCol lineCol) {

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/UnknownTokenException.java
  class UnknownTokenException (line 33) | public class UnknownTokenException extends SyntaxException {
    method UnknownTokenException (line 34) | public UnknownTokenException(String lineMsg, String token, LineCol lin...

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/AnnotationDef.java
  class AnnotationDef (line 15) | public class AnnotationDef implements Statement {
    method AnnotationDef (line 21) | public AnnotationDef(String name, Set<AST.Anno> annos, List<Statement>...
    method line_col (line 28) | @Override
    method foreachInnerStatements (line 33) | @Override
    method equals (line 39) | @Override
    method hashCode (line 52) | @Override
    method toString (line 60) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/ClassDef.java
  class ClassDef (line 41) | public class ClassDef implements Definition {
    method ClassDef (line 53) | public ClassDef(String name, List<AST.Access> generics, Set<Modifier> ...
    method toString (line 65) | @Override
    method equals (line 111) | @Override
    method hashCode (line 130) | @Override
    method line_col (line 143) | @Override
    method foreachInnerStatements (line 148) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/FunDef.java
  class FunDef (line 16) | public class FunDef implements Definition {
    method FunDef (line 25) | public FunDef(String name, List<VariableDef> params, AST.Access superT...
    method line_col (line 34) | @Override
    method foreachInnerStatements (line 39) | @Override
    method equals (line 47) | @Override
    method hashCode (line 62) | @Override
    method toString (line 72) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/InterfaceDef.java
  class InterfaceDef (line 42) | public class InterfaceDef implements Definition {
    method InterfaceDef (line 52) | public InterfaceDef(String name, List<AST.Access> generics, Set<Modifi...
    method toString (line 62) | @Override
    method equals (line 91) | @Override
    method hashCode (line 107) | @Override
    method line_col (line 118) | @Override
    method foreachInnerStatements (line 123) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/MethodDef.java
  class MethodDef (line 43) | public class MethodDef implements Definition {
    method MethodDef (line 53) | public MethodDef(String name, Set<Modifier> modifiers, AST.Access retu...
    method toString (line 63) | @Override
    method equals (line 91) | @Override
    method hashCode (line 108) | @Override
    method line_col (line 119) | @Override
    method foreachInnerStatements (line 124) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/ObjectDef.java
  class ObjectDef (line 18) | public class ObjectDef implements Definition {
    method ObjectDef (line 29) | public ObjectDef(String name,
    method line_col (line 47) | @Override
    method foreachInnerStatements (line 52) | @Override
    method toString (line 61) | @Override
    method equals (line 83) | @Override
    method hashCode (line 102) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/def/VariableDef.java
  class VariableDef (line 43) | public class VariableDef implements Definition, Expression {
    method VariableDef (line 52) | public VariableDef(String name, Set<Modifier> modifiers, Set<AST.Anno>...
    method getName (line 69) | public String getName() {
    method getType (line 73) | public AST.Access getType() {
    method setType (line 77) | public void setType(AST.Access type) {
    method getInit (line 81) | public Expression getInit() {
    method setInit (line 85) | public void setInit(Expression init) {
    method getModifiers (line 89) | public Set<Modifier> getModifiers() {
    method getAnnos (line 93) | public Set<AST.Anno> getAnnos() {
    method toString (line 97) | @Override
    method equals (line 117) | @Override
    method hashCode (line 132) | @Override
    method line_col (line 142) | @Override
    method foreachInnerStatements (line 147) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/literal/BoolLiteral.java
  class BoolLiteral (line 35) | public class BoolLiteral extends Literal {
    method BoolLiteral (line 36) | public BoolLiteral(String literal, LineCol lineCol) {
    method foreachInnerStatements (line 40) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/literal/NumberLiteral.java
  class NumberLiteral (line 35) | public class NumberLiteral extends Literal {
    method NumberLiteral (line 36) | public NumberLiteral(String literal, LineCol lineCol) {
    method foreachInnerStatements (line 40) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/literal/StringLiteral.java
  class StringLiteral (line 35) | public class StringLiteral extends Literal {
    method StringLiteral (line 36) | public StringLiteral(String literal, LineCol lineCol) {
    method foreachInnerStatements (line 40) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/operation/OneVariableOperation.java
  class OneVariableOperation (line 40) | public class OneVariableOperation implements Operation {
    method OneVariableOperation (line 45) | public OneVariableOperation(String operator, Expression e1, LineCol li...
    method operator (line 51) | @Override
    method expressions (line 56) | @Override
    method invokeOn (line 61) | @Override
    method isUnary (line 66) | @Override
    method toString (line 71) | @Override
    method equals (line 76) | @Override
    method hashCode (line 86) | @Override
    method line_col (line 93) | @Override
    method foreachInnerStatements (line 98) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/operation/TwoVariableOperation.java
  class TwoVariableOperation (line 40) | public class TwoVariableOperation implements Operation {
    method TwoVariableOperation (line 45) | public TwoVariableOperation(String operator, Expression e1, Expression...
    method operator (line 51) | @Override
    method expressions (line 56) | @Override
    method equals (line 61) | @Override
    method invokeOn (line 71) | @Override
    method isUnary (line 76) | @Override
    method toString (line 81) | @Override
    method hashCode (line 86) | @Override
    method line_col (line 93) | @Override
    method foreachInnerStatements (line 98) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/operation/UnaryOneVariableOperation.java
  class UnaryOneVariableOperation (line 40) | public class UnaryOneVariableOperation implements Operation {
    method UnaryOneVariableOperation (line 41) | public UnaryOneVariableOperation(String operator, Expression e1, LineC...
    method operator (line 51) | @Override
    method expressions (line 56) | @Override
    method invokeOn (line 61) | @Override
    method isUnary (line 66) | @Override
    method toString (line 71) | @Override
    method equals (line 76) | @Override
    method hashCode (line 86) | @Override
    method line_col (line 93) | @Override
    method foreachInnerStatements (line 98) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/pre/Import.java
  class Import (line 37) | public class Import implements Pre {
    method Import (line 44) | public Import(AST.PackageRef pkg, AST.Access access, boolean importAll...
    method toString (line 52) | @Override
    method line_col (line 75) | @Override
    method foreachInnerStatements (line 80) | @Override
    method equals (line 86) | @Override
    method hashCode (line 101) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/pre/Modifier.java
  class Modifier (line 35) | public class Modifier implements Pre {
    type Available (line 36) | public enum Available {
    method Modifier (line 45) | public Modifier(Available modifier, LineCol lineCol) {
    method equals (line 50) | @Override
    method hashCode (line 60) | @Override
    method toString (line 65) | @Override
    method line_col (line 70) | @Override
    method foreachInnerStatements (line 75) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/syntactic/pre/PackageDeclare.java
  class PackageDeclare (line 36) | public class PackageDeclare implements Pre {
    method PackageDeclare (line 40) | public PackageDeclare(AST.PackageRef pkg, LineCol lineCol) {
    method toString (line 45) | @Override
    method equals (line 50) | @Override
    method hashCode (line 60) | @Override
    method line_col (line 65) | @Override
    method foreachInnerStatements (line 70) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/util/BindList.java
  class BindList (line 9) | public class BindList<E> extends AbstractList<E> {
    method BindList (line 13) | public BindList(List<E> list1, List<E> list2) {
    method get (line 18) | @Override
    method set (line 27) | @Override
    method size (line 36) | @Override

FILE: latte-compiler/src/main/java/lt/compiler/util/Consts.java
  class Consts (line 6) | public class Consts {
    method Consts (line 14) | private Consts() {
    method flagMatch (line 17) | public static boolean flagMatch(int field, int flag) {

FILE: latte-compiler/src/main/java/lt/compiler/util/LocalVariables.java
  class LocalVariables (line 17) | public class LocalVariables {
    method LocalVariables (line 18) | private LocalVariables() {
    method _slots (line 21) | private static int _slots(STypeDef type) {
    method calculateIndexForLocalVariable (line 29) | public static int calculateIndexForLocalVariable(LeftValue theVar, Sem...
    method isParameterWrappingPointer (line 84) | public static boolean isParameterWrappingPointer(LeftValue v) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/AnnotationVisitor.java
  class AnnotationVisitor (line 40) | public abstract class AnnotationVisitor {
    method AnnotationVisitor (line 61) | public AnnotationVisitor(final int api) {
    method AnnotationVisitor (line 75) | public AnnotationVisitor(final int api, final AnnotationVisitor av) {
    method visit (line 98) | public void visit(String name, Object value) {
    method visitEnum (line 114) | public void visitEnum(String name, String desc, String value) {
    method visitAnnotation (line 133) | public AnnotationVisitor visitAnnotation(String name, String desc) {
    method visitArray (line 154) | public AnnotationVisitor visitArray(String name) {
    method visitEnd (line 164) | public void visitEnd() {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/AnnotationWriter.java
  class AnnotationWriter (line 38) | final class AnnotationWriter extends AnnotationVisitor {
    method AnnotationWriter (line 105) | AnnotationWriter(final ClassWriter cw, final boolean named,
    method visit (line 119) | @Override
    method visitEnum (line 192) | @Override
    method visitAnnotation (line 202) | @Override
    method visitArray (line 214) | @Override
    method visitEnd (line 225) | @Override
    method getSize (line 243) | int getSize() {
    method put (line 260) | void put(final ByteVector out) {
    method put (line 292) | static void put(final AnnotationWriter[] panns, final int off,
    method putTarget (line 332) | static void putTarget(int typeRef, TypePath typePath, ByteVector out) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Attribute.java
  class Attribute (line 38) | public class Attribute {
    method Attribute (line 61) | protected Attribute(final String type) {
    method isUnknown (line 71) | public boolean isUnknown() {
    method isCodeAttribute (line 80) | public boolean isCodeAttribute() {
    method getLabels (line 90) | protected Label[] getLabels() {
    method read (line 125) | protected Attribute read(final ClassReader cr, final int off,
    method write (line 159) | protected ByteVector write(final ClassWriter cw, final byte[] code,
    method getCount (line 172) | final int getCount() {
    method getSize (line 207) | final int getSize(final ClassWriter cw, final byte[] code, final int len,
    method put (line 245) | final void put(final ClassWriter cw, final byte[] code, final int len,

FILE: latte-compiler/src/main/java/lt/dependencies/asm/ByteVector.java
  class ByteVector (line 38) | public class ByteVector {
    method ByteVector (line 54) | public ByteVector() {
    method ByteVector (line 65) | public ByteVector(final int initialSize) {
    method putByte (line 77) | public ByteVector putByte(final int b) {
    method put11 (line 97) | ByteVector put11(final int b1, final int b2) {
    method putShort (line 117) | public ByteVector putShort(final int s) {
    method put12 (line 139) | ByteVector put12(final int b, final int s) {
    method putInt (line 160) | public ByteVector putInt(final int i) {
    method putLong (line 182) | public ByteVector putLong(final long l) {
    method putUTF8 (line 210) | public ByteVector putUTF8(final String s) {
    method encodeUTF8 (line 258) | ByteVector encodeUTF8(final String s, int i, int maxByteLength) {
    method putByteArray (line 314) | public ByteVector putByteArray(final byte[] b, final int off, final in...
    method enlarge (line 332) | private void enlarge(final int size) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/ClassReader.java
  class ClassReader (line 44) | public class ClassReader {
    method ClassReader (line 152) | public ClassReader(final byte[] b) {
    method ClassReader (line 166) | public ClassReader(final byte[] b, final int off, final int len) {
    method getAccess (line 228) | public int getAccess() {
    method getClassName (line 240) | public String getClassName() {
    method getSuperName (line 254) | public String getSuperName() {
    method getInterfaces (line 267) | public String[] getInterfaces() {
    method copyPool (line 288) | void copyPool(final ClassWriter classWriter) {
    method copyBootstrapMethods (line 376) | private void copyBootstrapMethods(final ClassWriter classWriter,
    method ClassReader (line 423) | public ClassReader(final InputStream is) throws IOException {
    method ClassReader (line 435) | public ClassReader(final String name) throws IOException {
    method readClass (line 452) | private static byte[] readClass(final InputStream is, boolean close)
    method accept (line 505) | public void accept(final ClassVisitor classVisitor, final int flags) {
    method accept (line 530) | public void accept(final ClassVisitor classVisitor,
    method readField (line 711) | private int readField(final ClassVisitor classVisitor,
    method readMethod (line 829) | private int readMethod(final ClassVisitor classVisitor,
    method readCode (line 1036) | private void readCode(final MethodVisitor mv, final Context context, i...
    method readTypeAnnotations (line 1586) | private int[] readTypeAnnotations(final MethodVisitor mv,
    method readAnnotationTarget (line 1664) | private int readAnnotationTarget(final Context context, int u) {
    method readParameterAnnotations (line 1738) | private void readParameterAnnotations(final MethodVisitor mv,
    method readAnnotationValues (line 1785) | private int readAnnotationValues(int v, final char[] buf,
    method readAnnotationValue (line 1820) | private int readAnnotationValue(int v, final char[] buf, final String ...
    method getImplicitFrame (line 1973) | private void getImplicitFrame(final Context frame) {
    method readFrame (line 2043) | private int readFrame(int stackMap, boolean zip, boolean unzip,
    method readFrameType (line 2134) | private int readFrameType(final Object[] frame, final int index, int v,
    method readLabel (line 2183) | protected Label readLabel(int offset, Label[] labels) {
    method getAttributes (line 2195) | private int getAttributes() {
    method readAttribute (line 2249) | private Attribute readAttribute(final Attribute[] attrs, final String ...
    method getItemCount (line 2269) | public int getItemCount() {
    method getItem (line 2283) | public int getItem(final int item) {
    method getMaxStringLength (line 2294) | public int getMaxStringLength() {
    method readByte (line 2307) | public int readByte(final int index) {
    method readUnsignedShort (line 2320) | public int readUnsignedShort(final int index) {
    method readShort (line 2334) | public short readShort(final int index) {
    method readInt (line 2348) | public int readInt(final int index) {
    method readLong (line 2363) | public long readLong(final int index) {
    method readUTF8 (line 2382) | public String readUTF8(int index, final char[] buf) {
    method readUTF (line 2407) | private String readUTF(int index, final int utfLen, final char[] buf) {
    method readClass (line 2457) | public String readClass(final int index, final char[] buf) {
    method readConst (line 2478) | public Object readConst(final int item, final char[] buf) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/ClassVisitor.java
  class ClassVisitor (line 42) | public abstract class ClassVisitor {
    method ClassVisitor (line 63) | public ClassVisitor(final int api) {
    method ClassVisitor (line 77) | public ClassVisitor(final int api, final ClassVisitor cv) {
    method visit (line 110) | public void visit(int version, int access, String name, String signature,
    method visitSource (line 128) | public void visitSource(String source, String debug) {
    method visitOuterClass (line 149) | public void visitOuterClass(String owner, String name, String desc) {
    method visitAnnotation (line 165) | public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
    method visitTypeAnnotation (line 194) | public AnnotationVisitor visitTypeAnnotation(int typeRef,
    method visitAttribute (line 211) | public void visitAttribute(Attribute attr) {
    method visitInnerClass (line 235) | public void visitInnerClass(String name, String outerName,
    method visitField (line 269) | public FieldVisitor visitField(int access, String name, String desc,
    method visitMethod (line 302) | public MethodVisitor visitMethod(int access, String name, String desc,
    method visitEnd (line 315) | public void visitEnd() {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/ClassWriter.java
  class ClassWriter (line 41) | public class ClassWriter extends ClassVisitor {
    method ClassWriter (line 607) | public ClassWriter(final int flags) {
    method ClassWriter (line 653) | public ClassWriter(final ClassReader classReader, final int flags) {
    method visit (line 663) | @Override
    method visitSource (line 684) | @Override
    method visitOuterClass (line 695) | @Override
    method visitAnnotation (line 704) | @Override
    method visitTypeAnnotation (line 724) | @Override
    method visitAttribute (line 747) | @Override
    method visitInnerClass (line 753) | @Override
    method visitField (line 784) | @Override
    method visitMethod (line 790) | @Override
    method visitEnd (line 797) | @Override
    method toByteArray (line 810) | public byte[] toByteArray() {
    method newConstItem (line 1016) | Item newConstItem(final Object cst) {
    method newConst (line 1074) | public int newConst(final Object cst) {
    method newUTF8 (line 1088) | public int newUTF8(final String value) {
    method newClassItem (line 1109) | Item newClassItem(final String value) {
    method newClass (line 1130) | public int newClass(final String value) {
    method newMethodTypeItem (line 1144) | Item newMethodTypeItem(final String methodDesc) {
    method newMethodType (line 1166) | public int newMethodType(final String methodDesc) {
    method newHandleItem (line 1194) | Item newHandleItem(final int tag, final String owner, final String name,
    method newHandle (line 1238) | @Deprecated
    method newHandle (line 1269) | public int newHandle(final int tag, final String owner, final String n...
    method newInvokeDynamicItem (line 1291) | Item newInvokeDynamicItem(final String name, final String desc,
    method newInvokeDynamic (line 1376) | public int newInvokeDynamic(final String name, final String desc,
    method newFieldItem (line 1393) | Item newFieldItem(final String owner, final String name, final String ...
    method newField (line 1418) | public int newField(final String owner, final String name, final Strin...
    method newMethodItem (line 1436) | Item newMethodItem(final String owner, final String name,
    method newMethod (line 1465) | public int newMethod(final String owner, final String name,
    method newInteger (line 1478) | Item newInteger(final int value) {
    method newFloat (line 1497) | Item newFloat(final float value) {
    method newLong (line 1516) | Item newLong(final long value) {
    method newDouble (line 1536) | Item newDouble(final double value) {
    method newString (line 1556) | private Item newString(final String value) {
    method newNameType (line 1579) | public int newNameType(final String name, final String desc) {
    method newNameTypeItem (line 1593) | Item newNameTypeItem(final String name, final String desc) {
    method addType (line 1612) | int addType(final String type) {
    method addUninitializedType (line 1633) | int addUninitializedType(final String type, final int offset) {
    method addType (line 1653) | private Item addType(final Item item) {
    method getMergedType (line 1681) | int getMergedType(final int type1, final int type2) {
    method getCommonSuperClass (line 1712) | protected String getCommonSuperClass(final String type1, final String ...
    method get (line 1746) | private Item get(final Item key) {
    method put (line 1761) | private void put(final Item i) {
    method put122 (line 1794) | private void put122(final int b, final int s1, final int s2) {
    method put112 (line 1808) | private void put112(final int b1, final int b2, final int s) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Context.java
  class Context (line 38) | class Context {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Edge.java
  class Edge (line 37) | class Edge {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/FieldVisitor.java
  class FieldVisitor (line 39) | public abstract class FieldVisitor {
    method FieldVisitor (line 60) | public FieldVisitor(final int api) {
    method FieldVisitor (line 74) | public FieldVisitor(final int api, final FieldVisitor fv) {
    method visitAnnotation (line 92) | public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
    method visitTypeAnnotation (line 117) | public AnnotationVisitor visitTypeAnnotation(int typeRef,
    method visitAttribute (line 134) | public void visitAttribute(Attribute attr) {
    method visitEnd (line 145) | public void visitEnd() {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/FieldWriter.java
  class FieldWriter (line 37) | final class FieldWriter extends FieldVisitor {
    method FieldWriter (line 119) | FieldWriter(final ClassWriter cw, final int access, final String name,
    method visitAnnotation (line 144) | @Override
    method visitTypeAnnotation (line 164) | @Override
    method visitAttribute (line 187) | @Override
    method visitEnd (line 193) | @Override
    method getSize (line 206) | int getSize() {
    method put (line 255) | void put(final ByteVector out) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Frame.java
  class Frame (line 37) | final class Frame {
    method get (line 530) | private int get(final int local) {
    method set (line 554) | private void set(final int local, final int type) {
    method push (line 575) | private void push(final int type) {
    method push (line 605) | private void push(final ClassWriter cw, final String desc) {
    method type (line 624) | private static int type(final ClassWriter cw, final String desc) {
    method pop (line 694) | private int pop() {
    method pop (line 709) | private void pop(final int elements) {
    method pop (line 729) | private void pop(final String desc) {
    method init (line 747) | private void init(final int var) {
    method init (line 773) | private int init(final ClassWriter cw, final int t) {
    method initInputFrame (line 812) | void initInputFrame(final ClassWriter cw, final int access,
    method execute (line 848) | void execute(final int opcode, final int arg, final ClassWriter cw,
    method merge (line 1286) | boolean merge(final ClassWriter cw, final Frame frame, final int edge) {
    method merge (line 1395) | private static boolean merge(final ClassWriter cw, int t,

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Handle.java
  class Handle (line 39) | public final class Handle {
    method Handle (line 97) | @Deprecated
    method Handle (line 125) | public Handle(int tag, String owner, String name, String desc, boolean...
    method getTag (line 143) | public int getTag() {
    method getOwner (line 154) | public String getOwner() {
    method getName (line 163) | public String getName() {
    method getDesc (line 172) | public String getDesc() {
    method isInterface (line 183) | public boolean isInterface() {
    method equals (line 187) | @Override
    method hashCode (line 200) | @Override
    method toString (line 218) | @Override

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Handler.java
  class Handler (line 37) | class Handler {
    method remove (line 83) | static Handler remove(Handler h, Label start, Label end) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Item.java
  class Item (line 38) | final class Item {
    method Item (line 111) | Item() {
    method Item (line 121) | Item(final int index) {
    method Item (line 133) | Item(final int index, final Item i) {
    method set (line 150) | void set(final int intVal) {
    method set (line 162) | void set(final long longVal) {
    method set (line 174) | void set(final float floatVal) {
    method set (line 186) | void set(final double doubleVal) {
    method set (line 204) | @SuppressWarnings("fallthrough")
    method set (line 245) | void set(String name, String desc, int bsmIndex) {
    method set (line 264) | void set(int position, int hashCode) {
    method isEqualTo (line 280) | boolean isEqualTo(final Item i) {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Label.java
  class Label (line 41) | public class Label {
    method Label (line 260) | public Label() {
    method getOffset (line 277) | public int getOffset() {
    method put (line 304) | void put(final MethodWriter owner, final ByteVector out, final int sou...
    method addReference (line 336) | private void addReference(final int sourcePosition,
    method resolve (line 374) | boolean resolve(final MethodWriter owner, final int position,
    method getFirst (line 427) | Label getFirst() {
    method inSubroutine (line 442) | boolean inSubroutine(final long id) {
    method inSameSubroutine (line 458) | boolean inSameSubroutine(final Label block) {
    method addToSubroutine (line 478) | void addToSubroutine(final long id, final int nbSubroutines) {
    method visitSubroutine (line 501) | void visitSubroutine(final Label JSR, final long id, final int nbSubro...
    method toString (line 561) | @Override

FILE: latte-compiler/src/main/java/lt/dependencies/asm/MethodVisitor.java
  class MethodVisitor (line 56) | public abstract class MethodVisitor {
    method MethodVisitor (line 77) | public MethodVisitor(final int api) {
    method MethodVisitor (line 91) | public MethodVisitor(final int api, final MethodVisitor mv) {
    method visitParameter (line 113) | public void visitParameter(String name, int access) {
    method visitAnnotationDefault (line 132) | public AnnotationVisitor visitAnnotationDefault() {
    method visitAnnotation (line 149) | public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
    method visitTypeAnnotation (line 181) | public AnnotationVisitor visitTypeAnnotation(int typeRef,
    method visitParameterAnnotation (line 204) | public AnnotationVisitor visitParameterAnnotation(int parameter,
    method visitAttribute (line 218) | public void visitAttribute(Attribute attr) {
    method visitCode (line 227) | public void visitCode() {
    method visitFrame (line 308) | public void visitFrame(int type, int nLocal, Object[] local, int nStack,
    method visitInsn (line 339) | public void visitInsn(int opcode) {
    method visitIntInsn (line 363) | public void visitIntInsn(int opcode, int operand) {
    method visitVarInsn (line 381) | public void visitVarInsn(int opcode, int var) {
    method visitTypeInsn (line 399) | public void visitTypeInsn(int opcode, String type) {
    method visitFieldInsn (line 420) | public void visitFieldInsn(int opcode, String owner, String name,
    method visitMethodInsn (line 443) | @Deprecated
    method visitMethodInsn (line 474) | public void visitMethodInsn(int opcode, String owner, String name,
    method visitInvokeDynamicInsn (line 505) | public void visitInvokeDynamicInsn(String name, String desc, Handle bsm,
    method visitJumpInsn (line 526) | public void visitJumpInsn(int opcode, Label label) {
    method visitLabel (line 539) | public void visitLabel(Label label) {
    method visitLdcInsn (line 593) | public void visitLdcInsn(Object cst) {
    method visitIincInsn (line 607) | public void visitIincInsn(int var, int increment) {
    method visitTableSwitchInsn (line 626) | public void visitTableSwitchInsn(int min, int max, Label dflt,
    method visitLookupSwitchInsn (line 644) | public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labe...
    method visitMultiANewArrayInsn (line 658) | public void visitMultiANewArrayInsn(String desc, int dims) {
    method visitInsnAnnotation (line 695) | public AnnotationVisitor visitInsnAnnotation(int typeRef,
    method visitTryCatchBlock (line 727) | public void visitTryCatchBlock(Label start, Label end, Label handler,
    method visitTryCatchAnnotation (line 755) | public AnnotationVisitor visitTryCatchAnnotation(int typeRef,
    method visitLocalVariable (line 789) | public void visitLocalVariable(String name, String desc, String signat...
    method visitLocalVariableAnnotation (line 825) | public AnnotationVisitor visitLocalVariableAnnotation(int typeRef,
    method visitLineNumber (line 850) | public void visitLineNumber(int line, Label start) {
    method visitMaxs (line 865) | public void visitMaxs(int maxStack, int maxLocals) {
    method visitEnd (line 876) | public void visitEnd() {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/MethodWriter.java
  class MethodWriter (line 40) | class MethodWriter extends MethodVisitor {
    method MethodWriter (line 452) | MethodWriter(final ClassWriter cw, final int access, final String name,
    method visitParameter (line 501) | @Override
    method visitAnnotationDefault (line 511) | @Override
    method visitAnnotation (line 520) | @Override
    method visitTypeAnnotation (line 540) | @Override
    method visitParameterAnnotation (line 563) | @Override
    method visitAttribute (line 595) | @Override
    method visitCode (line 606) | @Override
    method visitFrame (line 610) | @Override
    method visitInsn (line 713) | @Override
    method visitIntInsn (line 739) | @Override
    method visitVarInsn (line 764) | @Override
    method visitTypeInsn (line 823) | @Override
    method visitFieldInsn (line 845) | @Override
    method visitMethodInsn (line 884) | @Override
    method visitInvokeDynamicInsn (line 936) | @Override
    method visitJumpInsn (line 977) | @Override
    method visitLabel (line 1068) | @Override
    method visitLdcInsn (line 1123) | @Override
    method visitIincInsn (line 1157) | @Override
    method visitTableSwitchInsn (line 1181) | @Override
    method visitLookupSwitchInsn (line 1198) | @Override
    method visitSwitchInsn (line 1216) | private void visitSwitchInsn(final Label dflt, final Label[] labels) {
    method visitMultiANewArrayInsn (line 1242) | @Override
    method visitInsnAnnotation (line 1260) | @Override
    method visitTryCatchBlock (line 1284) | @Override
    method visitTryCatchAnnotation (line 1302) | @Override
    method visitLocalVariable (line 1325) | @Override
    method visitLocalVariableAnnotation (line 1357) | @Override
    method visitLineNumber (line 1392) | @Override
    method visitMaxs (line 1402) | @Override
    method visitEnd (line 1650) | @Override
    method addSuccessor (line 1666) | private void addSuccessor(final int info, final Label successor) {
    method noSuccessor (line 1680) | private void noSuccessor() {
    method visitFrame (line 1704) | private void visitFrame(final Frame f) {
    method visitImplicitFirstFrame (line 1756) | private void visitImplicitFirstFrame() {
    method startFrame (line 1825) | private int startFrame(final int offset, final int nLocal, final int n...
    method endFrame (line 1840) | private void endFrame() {
    method writeFrame (line 1856) | private void writeFrame() {
    method writeFrameTypes (line 1951) | private void writeFrameTypes(final int start, final int end) {
    method writeFrameType (line 2010) | private void writeFrameType(final Object type) {
    method getSize (line 2029) | final int getSize() {
    method put (line 2141) | final void put(final ByteVector out) {
    method resizeInstructions (line 2372) | private void resizeInstructions() {
    method readUnsignedShort (line 2800) | static int readUnsignedShort(final byte[] b, final int index) {
    method readShort (line 2813) | static short readShort(final byte[] b, final int index) {
    method readInt (line 2826) | static int readInt(final byte[] b, final int index) {
    method writeShort (line 2841) | static void writeShort(final byte[] b, final int index, final int s) {
    method getNewOffset (line 2873) | static int getNewOffset(final int[] indexes, final int[] sizes,
    method getNewOffset (line 2908) | static void getNewOffset(final int[] indexes, final int[] sizes,

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Opcodes.java
  type Opcodes (line 44) | public interface Opcodes {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/Type.java
  class Type (line 42) | public class Type {
    method Type (line 202) | private Type(final int sort, final char[] buf, final int off, final in...
    method getType (line 216) | public static Type getType(final String typeDescriptor) {
    method getObjectType (line 227) | public static Type getObjectType(final String internalName) {
    method getMethodType (line 240) | public static Type getMethodType(final String methodDescriptor) {
    method getMethodType (line 255) | public static Type getMethodType(final Type returnType,
    method getType (line 267) | public static Type getType(final Class<?> c) {
    method getType (line 300) | public static Type getType(final Constructor<?> c) {
    method getType (line 311) | public static Type getType(final Method m) {
    method getArgumentTypes (line 324) | public static Type[] getArgumentTypes(final String methodDescriptor) {
    method getArgumentTypes (line 360) | public static Type[] getArgumentTypes(final Method method) {
    method getReturnType (line 378) | public static Type getReturnType(final String methodDescriptor) {
    method getReturnType (line 401) | public static Type getReturnType(final Method method) {
    method getArgumentsAndReturnSizes (line 416) | public static int getArgumentsAndReturnSizes(final String desc) {
    method getType (line 455) | private static Type getType(final char[] buf, final int off) {
    method getSort (line 513) | public int getSort() {
    method getDimensions (line 523) | public int getDimensions() {
    method getElementType (line 537) | public Type getElementType() {
    method getClassName (line 547) | public String getClassName() {
    method getInternalName (line 588) | public String getInternalName() {
    method getArgumentTypes (line 598) | public Type[] getArgumentTypes() {
    method getReturnType (line 608) | public Type getReturnType() {
    method getArgumentsAndReturnSizes (line 623) | public int getArgumentsAndReturnSizes() {
    method getDescriptor (line 636) | public String getDescriptor() {
    method getMethodDescriptor (line 653) | public static String getMethodDescriptor(final Type returnType,
    method getDescriptor (line 672) | private void getDescriptor(final StringBuilder buf) {
    method getInternalName (line 700) | public static String getInternalName(final Class<?> c) {
    method getDescriptor (line 711) | public static String getDescriptor(final Class<?> c) {
    method getConstructorDescriptor (line 724) | public static String getConstructorDescriptor(final Constructor<?> c) {
    method getMethodDescriptor (line 741) | public static String getMethodDescriptor(final Method m) {
    method getDescriptor (line 761) | private static void getDescriptor(final StringBuilder buf, final Class...
    method getSize (line 815) | public int getSize() {
    method getOpcode (line 832) | public int getOpcode(final int opcode) {
    method equals (line 855) | @Override
    method hashCode (line 885) | @Override
    method toString (line 901) | @Override

FILE: latte-compiler/src/main/java/lt/dependencies/asm/TypePath.java
  class TypePath (line 39) | public class TypePath {
    method TypePath (line 84) | TypePath(byte[] b, int offset) {
    method getLength (line 94) | public int getLength() {
    method getStep (line 107) | public int getStep(int index) {
    method getStepArgument (line 121) | public int getStepArgument(int index) {
    method fromString (line 134) | public static TypePath fromString(final String typePath) {
    method toString (line 172) | @Override

FILE: latte-compiler/src/main/java/lt/dependencies/asm/TypeReference.java
  class TypeReference (line 42) | public class TypeReference {
    method TypeReference (line 189) | public TypeReference(int typeRef) {
    method newTypeReference (line 206) | public static TypeReference newTypeReference(int sort) {
    method newTypeParameterReference (line 220) | public static TypeReference newTypeParameterReference(int sort,
    method newTypeParameterBoundReference (line 239) | public static TypeReference newTypeParameterBoundReference(int sort,
    method newSuperTypeReference (line 254) | public static TypeReference newSuperTypeReference(int itfIndex) {
    method newFormalParameterReference (line 267) | public static TypeReference newFormalParameterReference(int paramIndex) {
    method newExceptionReference (line 281) | public static TypeReference newExceptionReference(int exceptionIndex) {
    method newTryCatchReference (line 295) | public static TypeReference newTryCatchReference(int tryCatchBlockInde...
    method newTypeArgumentReference (line 319) | public static TypeReference newTypeArgumentReference(int sort, int arg...
    method getSort (line 349) | public int getSort() {
    method getTypeParameterIndex (line 363) | public int getTypeParameterIndex() {
    method getTypeParameterBoundIndex (line 376) | public int getTypeParameterBoundIndex() {
    method getSuperTypeIndex (line 389) | public int getSuperTypeIndex() {
    method getFormalParameterIndex (line 400) | public int getFormalParameterIndex() {
    method getExceptionIndex (line 411) | public int getExceptionIndex() {
    method getTryCatchBlockIndex (line 423) | public int getTryCatchBlockIndex() {
    method getTypeArgumentIndex (line 439) | public int getTypeArgumentIndex() {
    method getValue (line 449) | public int getValue() {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/signature/SignatureReader.java
  class SignatureReader (line 42) | public class SignatureReader {
    method SignatureReader (line 56) | public SignatureReader(final String signature) {
    method accept (line 75) | public void accept(final SignatureVisitor v) {
    method acceptType (line 132) | public void acceptType(final SignatureVisitor v) {
    method parseType (line 147) | private static int parseType(final String signature, int pos,

FILE: latte-compiler/src/main/java/lt/dependencies/asm/signature/SignatureVisitor.java
  class SignatureVisitor (line 57) | public abstract class SignatureVisitor {
    method SignatureVisitor (line 87) | public SignatureVisitor(final int api) {
    method visitFormalTypeParameter (line 100) | public void visitFormalTypeParameter(String name) {
    method visitClassBound (line 108) | public SignatureVisitor visitClassBound() {
    method visitInterfaceBound (line 117) | public SignatureVisitor visitInterfaceBound() {
    method visitSuperclass (line 127) | public SignatureVisitor visitSuperclass() {
    method visitInterface (line 136) | public SignatureVisitor visitInterface() {
    method visitParameterType (line 145) | public SignatureVisitor visitParameterType() {
    method visitReturnType (line 154) | public SignatureVisitor visitReturnType() {
    method visitExceptionType (line 163) | public SignatureVisitor visitExceptionType() {
    method visitBaseType (line 174) | public void visitBaseType(char descriptor) {
    method visitTypeVariable (line 183) | public void visitTypeVariable(String name) {
    method visitArrayType (line 192) | public SignatureVisitor visitArrayType() {
    method visitClassType (line 203) | public void visitClassType(String name) {
    method visitInnerClassType (line 212) | public void visitInnerClassType(String name) {
    method visitTypeArgument (line 219) | public void visitTypeArgument() {
    method visitTypeArgument (line 229) | public SignatureVisitor visitTypeArgument(char wildcard) {
    method visitEnd (line 236) | public void visitEnd() {

FILE: latte-compiler/src/main/java/lt/dependencies/asm/signature/SignatureWriter.java
  class SignatureWriter (line 40) | public class SignatureWriter extends SignatureVisitor {
    method SignatureWriter (line 68) | public SignatureWriter() {
    method visitFormalTypeParameter (line 76) | @Override
    method visitClassBound (line 86) | @Override
    method visitInterfaceBound (line 91) | @Override
    method visitSuperclass (line 97) | @Override
    method visitInterface (line 103) | @Override
    method visitParameterType (line 108) | @Override
    method visitReturnType (line 118) | @Override
    method visitExceptionType (line 128) | @Override
    method visitBaseType (line 134) | @Override
    method visitTypeVariable (line 139) | @Override
    method visitArrayType (line 146) | @Override
    method visitClassType (line 152) | @Override
    method visitInnerClassType (line 159) | @Override
    method visitTypeArgument (line 167) | @Override
    method visitTypeArgument (line 176) | @Override
    method visitEnd (line 188) | @Override
    method toString (line 199) | @Override
    method endFormals (line 211) | private void endFormals() {
    method endArguments (line 221) | private void endArguments() {

FILE: latte-compiler/src/main/java/lt/generator/AbstractSourceGenerator.java
  class AbstractSourceGenerator (line 36) | public abstract class AbstractSourceGenerator implements SourceGenerator {
    method init (line 43) | @Override

FILE: latte-compiler/src/main/java/lt/generator/SourceGenerator.java
  type SourceGenerator (line 36) | public interface SourceGenerator {
    method init (line 51) | void init(List<Statement> ast, SemanticProcessor processor, SemanticSc...
    method generate (line 61) | Object generate() throws SyntaxException;
    method resultType (line 66) | int resultType();

FILE: latte-compiler/src/main/java/lt/lang/Pointer.java
  class Pointer (line 35) | @SuppressWarnings("unused")
    method Pointer (line 41) | public Pointer(boolean nonnull, boolean nonempty) {
    method get (line 51) | public T get() {
    method set (line 62) | public Pointer set(T item) throws Throwable {

FILE: latte-compiler/src/main/java/lt/lang/Unit.java
  class Unit (line 32) | @LatteObject
    method Unit (line 36) | private Unit() {
    method get (line 39) | public static Unit get() {
    method toString (line 43) | @Override

FILE: latte-compiler/src/main/java/lt/lang/ast.java
  class ast (line 36) | public class ast implements SourceGenerator {
    method init (line 39) | @Override
    method generate (line 44) | @Override
    method resultType (line 49) | @Override

FILE: latte-compiler/src/main/java/lt/lang/function/Function.java
  type Function (line 32) | public interface Function extends Serializable {

FILE: latte-compiler/src/main/java/lt/lang/function/Function0.java
  type Function0 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply() throws Exception;

FILE: latte-compiler/src/main/java/lt/lang/function/Function1.java
  type Function1 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a) throws Exception;

FILE: latte-compiler/src/main/java/lt/lang/function/Function10.java
  type Function10 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function11.java
  type Function11 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function12.java
  type Function12 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function13.java
  type Function13 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function14.java
  type Function14 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function15.java
  type Function15 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function16.java
  type Function16 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function17.java
  type Function17 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function18.java
  type Function18 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function19.java
  type Function19 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function2.java
  type Function2 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b) throws Exception;

FILE: latte-compiler/src/main/java/lt/lang/function/Function20.java
  type Function20 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function21.java
  type Function21 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function22.java
  type Function22 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function23.java
  type Function23 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function24.java
  type Function24 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function25.java
  type Function25 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function26.java
  type Function26 (line 32) | @FunctionalInterface
    method apply (line 34) | Res apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function3.java
  type Function3 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c) throws Exception;

FILE: latte-compiler/src/main/java/lt/lang/function/Function4.java
  type Function4 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d) throws Exception;

FILE: latte-compiler/src/main/java/lt/lang/function/Function5.java
  type Function5 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e) throws Exception;

FILE: latte-compiler/src/main/java/lt/lang/function/Function6.java
  type Function6 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function7.java
  type Function7 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function8.java
  type Function8 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/function/Function9.java
  type Function9 (line 32) | @FunctionalInterface
    method apply (line 34) | R apply(A a, B b, C c, D d, E e,

FILE: latte-compiler/src/main/java/lt/lang/implicit/CollectionImplicit.java
  class CollectionImplicit (line 14) | @LatteObject
    method CollectionImplicit (line 19) | private CollectionImplicit() {
    method cast (line 22) | @Implicit
    method cast (line 27) | @Implicit
    method cast (line 32) | @Implicit
    method cast (line 37) | @Implicit

FILE: latte-compiler/src/main/java/lt/lang/implicit/ObjectImplicit.java
  class ObjectImplicit (line 9) | @Implicit
    method ObjectImplicit (line 14) | private ObjectImplicit() {
    method cast (line 17) | @Implicit

FILE: latte-compiler/src/main/java/lt/lang/implicit/PrimitivesImplicit.java
  class PrimitivesImplicit (line 9) | @Implicit
    method PrimitivesImplicit (line 14) | private PrimitivesImplicit() {
    method cast (line 17) | @Implicit
    method cast (line 22) | @Implicit
    method cast (line 27) | @Implicit
    method cast (line 32) | @Implicit
    method cast (line 37) | @Implicit
    method cast (line 42) | @Implicit
    method cast (line 47) | @Implicit
    method cast (line 52) | @Implicit

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichBool.java
  class RichBool (line 8) | public class RichBool {
    method RichBool (line 11) | public RichBool(Boolean b) {
    method logicNot (line 15) | public boolean logicNot() throws Throwable {
    method and (line 33) | public boolean and(Boolean b) {
    method and (line 37) | public boolean and(Object o) throws Throwable {
    method or (line 47) | public boolean or(Boolean b) {
    method or (line 51) | public boolean or(Object o) throws Throwable {
    method xor (line 149) | public boolean xor(Boolean b) throws Throwable {

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichByte.java
  class RichByte (line 8) | public class RichByte {
    method RichByte (line 11) | public RichByte(Byte b) {
    method not (line 15) | public int not() {
    method negate (line 19) | public int negate() {
    method logicNot (line 23) | public boolean logicNot() throws Throwable {
    method add (line 33) | public int add(Integer i) {
    method add (line 37) | public int add(Byte b) {
    method add (line 41) | public int add(Short s) {
    method add (line 45) | public int add(Character c) {
    method add (line 49) | public long add(Long l) {
    method add (line 53) | public float add(Float f) {
    method add (line 57) | public double add(Double d) {
    method and (line 67) | public int and(Integer i) {
    method and (line 71) | public int and(Byte b) {
    method and (line 75) | public int and(Short s) {
    method and (line 79) | public int and(Character c) {
    method and (line 83) | public long and(Long l) {
    method and (line 87) | public boolean and(Boolean b) throws Throwable {
    method or (line 97) | public int or(Integer i) {
    method or (line 101) | public int or(Byte b) {
    method or (line 105) | public int or(Short s) {
    method or (line 109) | public int or(Character c) {
    method or (line 113) | public long or(Long l) {
    method or (line 117) | public boolean or(Boolean b) throws Throwable {
    method divide (line 127) | public int divide(Integer i) {
    method divide (line 131) | public int divide(Byte b) {
    method divide (line 135) | public int divide(Short s) {
    method divide (line 139) | public int divide(Character c) {
    method divide (line 143) | public long divide(Long l) {
    method divide (line 147) | public float divide(Float f) {
    method divide (line 151) | public double divide(Double d) {
    method ge (line 161) | public boolean ge(Integer i) {
    method ge (line 165) | public boolean ge(Byte b) {
    method ge (line 169) | public boolean ge(Short s) {
    method ge (line 173) | public boolean ge(Character c) {
    method ge (line 177) | public boolean ge(Long l) {
    method ge (line 181) | public boolean ge(Float f) {
    method ge (line 185) | public boolean ge(Double d) {
    method gt (line 195) | public boolean gt(Integer i) {
    method gt (line 199) | public boolean gt(Byte b) {
    method gt (line 203) | public boolean gt(Short s) {
    method gt (line 207) | public boolean gt(Character c) {
    method gt (line 211) | public boolean gt(Long l) {
    method gt (line 215) | public boolean gt(Float f) {
    method gt (line 219) | public boolean gt(Double d) {
    method le (line 229) | public boolean le(Integer i) {
    method le (line 233) | public boolean le(Byte b) {
    method le (line 237) | public boolean le(Short s) {
    method le (line 241) | public boolean le(Character c) {
    method le (line 245) | public boolean le(Long l) {
    method le (line 249) | public boolean le(Float f) {
    method le (line 253) | public boolean le(Double d) {
    method lt (line 263) | public boolean lt(Integer i) {
    method lt (line 267) | public boolean lt(Byte b) {
    method lt (line 271) | public boolean lt(Short s) {
    method lt (line 275) | public boolean lt(Character c) {
    method lt (line 279) | public boolean lt(Long l) {
    method lt (line 283) | public boolean lt(Float f) {
    method lt (line 287) | public boolean lt(Double d) {
    method multiply (line 297) | public int multiply(Integer i) {
    method multiply (line 301) | public int multiply(Byte b) {
    method multiply (line 305) | public int multiply(Short s) {
    method multiply (line 309) | public int multiply(Character c) {
    method multiply (line 313) | public long multiply(Long l) {
    method multiply (line 317) | public float multiply(Float f) {
    method multiply (line 321) | public double multiply(Double d) {
    method remainder (line 331) | public int remainder(Integer i) {
    method remainder (line 335) | public int remainder(Byte b) {
    method remainder (line 339) | public int remainder(Short s) {
    method remainder (line 343) | public int remainder(Character c) {
    method remainder (line 347) | public long remainder(Long l) {
    method shiftLeft (line 357) | public int shiftLeft(Integer i) {
    method shiftLeft (line 361) | public int shiftLeft(Byte b) {
    method shiftLeft (line 365) | public int shiftLeft(Short s) {
    method shiftLeft (line 369) | public int shiftLeft(Character c) {
    method shiftLeft (line 373) | public int shiftLeft(Long l) {
    method shiftRight (line 383) | public int shiftRight(Integer i) {
    method shiftRight (line 387) | public int shiftRight(Byte b) {
    method shiftRight (line 391) | public int shiftRight(Short s) {
    method shiftRight (line 395) | public int shiftRight(Character c) {
    method shiftRight (line 399) | public int shiftRight(Long l) {
    method subtract (line 409) | public int subtract(Integer i) {
    method subtract (line 413) | public int subtract(Byte b) {
    method subtract (line 417) | public int subtract(Short s) {
    method subtract (line 421) | public int subtract(Character c) {
    method subtract (line 425) | public long subtract(Long l) {
    method subtract (line 429) | public float subtract(Float f) {
    method subtract (line 433) | public double subtract(Double d) {
    method unsignedShiftRight (line 443) | public int unsignedShiftRight(Integer i) {
    method unsignedShiftRight (line 447) | public int unsignedShiftRight(Byte b) {
    method unsignedShiftRight (line 451) | public int unsignedShiftRight(Short s) {
    method unsignedShiftRight (line 455) | public int unsignedShiftRight(Character c) {
    method unsignedShiftRight (line 459) | public int unsignedShiftRight(Long l) {
    method xor (line 469) | public int xor(Integer i) {
    method xor (line 473) | public int xor(Byte b) {
    method xor (line 477) | public int xor(Short s) {
    method xor (line 481) | public int xor(Character c) {
    method xor (line 485) | public long xor(Long l) {
    method xor (line 489) | public boolean xor(Boolean b) throws Throwable {
    method pow (line 499) | public double pow(Integer i) {
    method pow (line 503) | public double pow(Long l) {
    method pow (line 507) | public double pow(Float f) {
    method pow (line 511) | public double pow(Double d) {
    method pow (line 515) | public double pow(Byte b) {
    method pow (line 519) | public double pow(Short s) {
    method pow (line 523) | public double pow(Character c) {

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichChar.java
  class RichChar (line 10) | public class RichChar {
    method RichChar (line 13) | public RichChar(Character c) {
    method r (line 17) | public Pattern r() {
    method r (line 21) | public Pattern r(int flags) {
    method not (line 25) | public int not() {
    method negate (line 29) | public int negate() {
    method logicNot (line 33) | public boolean logicNot() throws Throwable {
    method add (line 43) | public int add(Integer i) {
    method add (line 47) | public int add(Byte b) {
    method add (line 51) | public int add(Short s) {
    method add (line 55) | public int add(Character c) {
    method add (line 59) | public long add(Long l) {
    method add (line 63) | public float add(Float f) {
    method add (line 67) | public double add(Double d) {
    method and (line 77) | public int and(Integer i) {
    method and (line 81) | public int and(Byte b) {
    method and (line 85) | public int and(Short s) {
    method and (line 89) | public int and(Character c) {
    method and (line 93) | public long and(Long l) {
    method and (line 97) | public boolean and(Boolean b) throws Throwable {
    method or (line 107) | public int or(Integer i) {
    method or (line 111) | public int or(Byte b) {
    method or (line 115) | public int or(Short s) {
    method or (line 119) | public int or(Character c) {
    method or (line 123) | public long or(Long l) {
    method or (line 127) | public boolean or(Boolean b) throws Throwable {
    method divide (line 137) | public int divide(Integer i) {
    method divide (line 141) | public int divide(Byte b) {
    method divide (line 145) | public int divide(Short s) {
    method divide (line 149) | public int divide(Character c) {
    method divide (line 153) | public long divide(Long l) {
    method divide (line 157) | public float divide(Float f) {
    method divide (line 161) | public double divide(Double d) {
    method ge (line 171) | public boolean ge(Integer i) {
    method ge (line 175) | public boolean ge(Byte b) {
    method ge (line 179) | public boolean ge(Short s) {
    method ge (line 183) | public boolean ge(Character c) {
    method ge (line 187) | public boolean ge(Long l) {
    method ge (line 191) | public boolean ge(Float f) {
    method ge (line 195) | public boolean ge(Double d) {
    method gt (line 205) | public boolean gt(Integer i) {
    method gt (line 209) | public boolean gt(Byte b) {
    method gt (line 213) | public boolean gt(Short s) {
    method gt (line 217) | public boolean gt(Character c) {
    method gt (line 221) | public boolean gt(Long l) {
    method gt (line 225) | public boolean gt(Float f) {
    method gt (line 229) | public boolean gt(Double d) {
    method le (line 239) | public boolean le(Integer i) {
    method le (line 243) | public boolean le(Byte b) {
    method le (line 247) | public boolean le(Short s) {
    method le (line 251) | public boolean le(Character c) {
    method le (line 255) | public boolean le(Long l) {
    method le (line 259) | public boolean le(Float f) {
    method le (line 263) | public boolean le(Double d) {
    method lt (line 273) | public boolean lt(Integer i) {
    method lt (line 277) | public boolean lt(Byte b) {
    method lt (line 281) | public boolean lt(Short s) {
    method lt (line 285) | public boolean lt(Character c) {
    method lt (line 289) | public boolean lt(Long l) {
    method lt (line 293) | public boolean lt(Float f) {
    method lt (line 297) | public boolean lt(Double d) {
    method multiply (line 307) | public int multiply(Integer i) {
    method multiply (line 311) | public int multiply(Byte b) {
    method multiply (line 315) | public int multiply(Short s) {
    method multiply (line 319) | public int multiply(Character c) {
    method multiply (line 323) | public long multiply(Long l) {
    method multiply (line 327) | public float multiply(Float f) {
    method multiply (line 331) | public double multiply(Double d) {
    method remainder (line 341) | public int remainder(Integer i) {
    method remainder (line 345) | public int remainder(Byte b) {
    method remainder (line 349) | public int remainder(Short s) {
    method remainder (line 353) | public int remainder(Character c) {
    method remainder (line 357) | public long remainder(Long l) {
    method shiftLeft (line 367) | public int shiftLeft(Integer i) {
    method shiftLeft (line 371) | public int shiftLeft(Byte b) {
    method shiftLeft (line 375) | public int shiftLeft(Short s) {
    method shiftLeft (line 379) | public int shiftLeft(Character c) {
    method shiftLeft (line 383) | public int shiftLeft(Long l) {
    method shiftRight (line 393) | public int shiftRight(Integer i) {
    method shiftRight (line 397) | public int shiftRight(Byte b) {
    method shiftRight (line 401) | public int shiftRight(Short s) {
    method shiftRight (line 405) | public int shiftRight(Character c) {
    method shiftRight (line 409) | public int shiftRight(Long l) {
    method subtract (line 419) | public int subtract(Integer i) {
    method subtract (line 423) | public int subtract(Byte b) {
    method subtract (line 427) | public int subtract(Short s) {
    method subtract (line 431) | public int subtract(Character c) {
    method subtract (line 435) | public long subtract(Long l) {
    method subtract (line 439) | public float subtract(Float f) {
    method subtract (line 443) | public double subtract(Double d) {
    method unsignedShiftRight (line 453) | public int unsignedShiftRight(Integer i) {
    method unsignedShiftRight (line 457) | public int unsignedShiftRight(Byte b) {
    method unsignedShiftRight (line 461) | public int unsignedShiftRight(Short s) {
    method unsignedShiftRight (line 465) | public int unsignedShiftRight(Character c) {
    method unsignedShiftRight (line 469) | public int unsignedShiftRight(Long l) {
    method xor (line 479) | public int xor(Integer i) {
    method xor (line 483) | public int xor(Byte b) {
    method xor (line 487) | public int xor(Short s) {
    method xor (line 491) | public int xor(Character c) {
    method xor (line 495) | public long xor(Long l) {
    method xor (line 499) | public boolean xor(Boolean b) throws Throwable {
    method pow (line 509) | public double pow(Integer i) {
    method pow (line 513) | public double pow(Long l) {
    method pow (line 517) | public double pow(Float f) {
    method pow (line 521) | public double pow(Double d) {
    method pow (line 525) | public double pow(Byte b) {
    method pow (line 529) | public double pow(Short s) {
    method pow (line 533) | public double pow(Character c) {

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichDouble.java
  class RichDouble (line 8) | public class RichDouble {
    method RichDouble (line 11) | public RichDouble(Double d) {
    method negate (line 15) | public double negate() {
    method logicNot (line 19) | public boolean logicNot() throws Throwable {
    method add (line 29) | public double add(Integer i) {
    method add (line 33) | public double add(Byte b) {
    method add (line 37) | public double add(Short s) {
    method add (line 41) | public double add(Character c) {
    method add (line 45) | public double add(Long l) {
    method add (line 49) | public double add(Float f) {
    method add (line 53) | public double add(Double d) {
    method and (line 63) | public boolean and(Boolean b) throws Throwable {
    method or (line 73) | public boolean or(Boolean b) throws Throwable {
    method divide (line 83) | public double divide(Integer i) {
    method divide (line 87) | public double divide(Byte b) {
    method divide (line 91) | public double divide(Short s) {
    method divide (line 95) | public double divide(Character c) {
    method divide (line 99) | public double divide(Long l) {
    method divide (line 103) | public double divide(Float f) {
    method divide (line 107) | public double divide(Double d) {
    method ge (line 117) | public boolean ge(Integer i) {
    method ge (line 121) | public boolean ge(Byte b) {
    method ge (line 125) | public boolean ge(Short s) {
    method ge (line 129) | public boolean ge(Character c) {
    method ge (line 133) | public boolean ge(Long l) {
    method ge (line 137) | public boolean ge(Float f) {
    method ge (line 141) | public boolean ge(Double d) {
    method gt (line 151) | public boolean gt(Integer i) {
    method gt (line 155) | public boolean gt(Byte b) {
    method gt (line 159) | public boolean gt(Short s) {
    method gt (line 163) | public boolean gt(Character c) {
    method gt (line 167) | public boolean gt(Long l) {
    method gt (line 171) | public boolean gt(Float f) {
    method gt (line 175) | public boolean gt(Double d) {
    method le (line 185) | public boolean le(Integer i) {
    method le (line 189) | public boolean le(Byte b) {
    method le (line 193) | public boolean le(Short s) {
    method le (line 197) | public boolean le(Character c) {
    method le (line 201) | public boolean le(Long l) {
    method le (line 205) | public boolean le(Float f) {
    method le (line 209) | public boolean le(Double d) {
    method lt (line 219) | public boolean lt(Integer i) {
    method lt (line 223) | public boolean lt(Byte b) {
    method lt (line 227) | public boolean lt(Short s) {
    method lt (line 231) | public boolean lt(Character c) {
    method lt (line 235) | public boolean lt(Long l) {
    method lt (line 239) | public boolean lt(Float f) {
    method lt (line 243) | public boolean lt(Double d) {
    method multiply (line 253) | public double multiply(Integer i) {
    method multiply (line 257) | public double multiply(Byte b) {
    method multiply (line 261) | public double multiply(Short s) {
    method multiply (line 265) | public double multiply(Character c) {
    method multiply (line 269) | public double multiply(Long l) {
    method multiply (line 273) | public double multiply(Float f) {
    method multiply (line 277) | public double multiply(Double d) {
    method subtract (line 311) | public double subtract(Integer i) {
    method subtract (line 315) | public double subtract(Byte b) {
    method subtract (line 319) | public double subtract(Short s) {
    method subtract (line 323) | public double subtract(Character c) {
    method subtract (line 327) | public double subtract(Long l) {
    method subtract (line 331) | public double subtract(Float f) {
    method subtract (line 335) | public double subtract(Double d) {
    method xor (line 353) | public boolean xor(Boolean b) throws Throwable {
    method pow (line 363) | public double pow(Integer i) {
    method pow (line 367) | public double pow(Long l) {
    method pow (line 371) | public double pow(Float f) {
    method pow (line 375) | public double pow(Double d) {
    method pow (line 379) | public double pow(Byte b) {
    method pow (line 383) | public double pow(Short s) {
    method pow (line 387) | public double pow(Character c) {

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichFloat.java
  class RichFloat (line 8) | public class RichFloat {
    method RichFloat (line 11) | public RichFloat(Float f) {
    method negate (line 15) | public float negate() {
    method logicNot (line 19) | public boolean logicNot() throws Throwable {
    method add (line 29) | public float add(Integer i) {
    method add (line 33) | public float add(Byte b) {
    method add (line 37) | public float add(Short s) {
    method add (line 41) | public float add(Character c) {
    method add (line 45) | public float add(Long l) {
    method add (line 49) | public float add(Float f) {
    method add (line 53) | public double add(Double d) {
    method and (line 63) | public boolean and(Boolean b) throws Throwable {
    method or (line 73) | public boolean or(Boolean b) throws Throwable {
    method divide (line 83) | public float divide(Integer i) {
    method divide (line 87) | public float divide(Byte b) {
    method divide (line 91) | public float divide(Short s) {
    method divide (line 95) | public float divide(Character c) {
    method divide (line 99) | public float divide(Long l) {
    method divide (line 103) | public float divide(Float f) {
    method divide (line 107) | public double divide(Double d) {
    method ge (line 117) | public boolean ge(Integer i) {
    method ge (line 121) | public boolean ge(Byte b) {
    method ge (line 125) | public boolean ge(Short s) {
    method ge (line 129) | public boolean ge(Character c) {
    method ge (line 133) | public boolean ge(Long l) {
    method ge (line 137) | public boolean ge(Float f) {
    method ge (line 141) | public boolean ge(Double d) {
    method gt (line 151) | public boolean gt(Integer i) {
    method gt (line 155) | public boolean gt(Byte b) {
    method gt (line 159) | public boolean gt(Short s) {
    method gt (line 163) | public boolean gt(Character c) {
    method gt (line 167) | public boolean gt(Long l) {
    method gt (line 171) | public boolean gt(Float f) {
    method gt (line 175) | public boolean gt(Double d) {
    method le (line 185) | public boolean le(Integer i) {
    method le (line 189) | public boolean le(Byte b) {
    method le (line 193) | public boolean le(Short s) {
    method le (line 197) | public boolean le(Character c) {
    method le (line 201) | public boolean le(Long l) {
    method le (line 205) | public boolean le(Float f) {
    method le (line 209) | public boolean le(Double d) {
    method lt (line 219) | public boolean lt(Integer i) {
    method lt (line 223) | public boolean lt(Byte b) {
    method lt (line 227) | public boolean lt(Short s) {
    method lt (line 231) | public boolean lt(Character c) {
    method lt (line 235) | public boolean lt(Long l) {
    method lt (line 239) | public boolean lt(Float f) {
    method lt (line 243) | public boolean lt(Double d) {
    method multiply (line 253) | public float multiply(Integer i) {
    method multiply (line 257) | public float multiply(Byte b) {
    method multiply (line 261) | public float multiply(Short s) {
    method multiply (line 265) | public float multiply(Character c) {
    method multiply (line 269) | public float multiply(Long l) {
    method multiply (line 273) | public float multiply(Float f) {
    method multiply (line 277) | public double multiply(Double d) {
    method subtract (line 311) | public float subtract(Integer i) {
    method subtract (line 315) | public float subtract(Byte b) {
    method subtract (line 319) | public float subtract(Short s) {
    method subtract (line 323) | public float subtract(Character c) {
    method subtract (line 327) | public float subtract(Long l) {
    method subtract (line 331) | public float subtract(Float f) {
    method subtract (line 335) | public double subtract(Double d) {
    method xor (line 353) | public boolean xor(Boolean b) throws Throwable {
    method pow (line 363) | public double pow(Integer i) {
    method pow (line 367) | public double pow(Long l) {
    method pow (line 371) | public double pow(Float f) {
    method pow (line 375) | public double pow(Double d) {
    method pow (line 379) | public double pow(Byte b) {
    method pow (line 383) | public double pow(Short s) {
    method pow (line 387) | public double pow(Character c) {

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichInt.java
  class RichInt (line 9) | public class RichInt {
    method RichInt (line 12) | public RichInt(Integer i) {
    method not (line 16) | public int not() {
    method negate (line 20) | public int negate() {
    method logicNot (line 24) | public boolean logicNot() throws Throwable {
    method add (line 34) | public int add(Integer i) {
    method add (line 38) | public int add(Byte b) {
    method add (line 42) | public int add(Short s) {
    method add (line 46) | public int add(Character c) {
    method add (line 50) | public long add(Long l) {
    method add (line 54) | public float add(Float f) {
    method add (line 58) | public double add(Double d) {
    method and (line 68) | public int and(Integer i) {
    method and (line 72) | public int and(Byte b) {
    method and (line 76) | public int and(Short s) {
    method and (line 80) | public int and(Character c) {
    method and (line 84) | public long and(Long l) {
    method and (line 88) | public boolean and(Boolean b) throws Throwable {
    method or (line 98) | public int or(Integer i) {
    method or (line 102) | public int or(Byte b) {
    method or (line 106) | public int or(Short s) {
    method or (line 110) | public int or(Character c) {
    method or (line 114) | public long or(Long l) {
    method or (line 118) | public boolean or(Boolean b) throws Throwable {
    method divide (line 128) | public int divide(Integer i) {
    method divide (line 132) | public int divide(Byte b) {
    method divide (line 136) | public int divide(Short s) {
    method divide (line 140) | public int divide(Character c) {
    method divide (line 144) | public long divide(Long l) {
    method divide (line 148) | public float divide(Float f) {
    method divide (line 152) | public double divide(Double d) {
    method ge (line 162) | public boolean ge(Integer i) {
    method ge (line 166) | public boolean ge(Byte b) {
    method ge (line 170) | public boolean ge(Short s) {
    method ge (line 174) | public boolean ge(Character c) {
    method ge (line 178) | public boolean ge(Long l) {
    method ge (line 182) | public boolean ge(Float f) {
    method ge (line 186) | public boolean ge(Double d) {
    method gt (line 196) | public boolean gt(Integer i) {
    method gt (line 200) | public boolean gt(Byte b) {
    method gt (line 204) | public boolean gt(Short s) {
    method gt (line 208) | public boolean gt(Character c) {
    method gt (line 212) | public boolean gt(Long l) {
    method gt (line 216) | public boolean gt(Float f) {
    method gt (line 220) | public boolean gt(Double d) {
    method le (line 230) | public boolean le(Integer i) {
    method le (line 234) | public boolean le(Byte b) {
    method le (line 238) | public boolean le(Short s) {
    method le (line 242) | public boolean le(Character c) {
    method le (line 246) | public boolean le(Long l) {
    method le (line 250) | public boolean le(Float f) {
    method le (line 254) | public boolean le(Double d) {
    method lt (line 264) | public boolean lt(Integer i) {
    method lt (line 268) | public boolean lt(Byte b) {
    method lt (line 272) | public boolean lt(Short s) {
    method lt (line 276) | public boolean lt(Character c) {
    method lt (line 280) | public boolean lt(Long l) {
    method lt (line 284) | public boolean lt(Float f) {
    method lt (line 288) | public boolean lt(Double d) {
    method multiply (line 298) | public int multiply(Integer i) {
    method multiply (line 302) | public int multiply(Byte b) {
    method multiply (line 306) | public int multiply(Short s) {
    method multiply (line 310) | public int multiply(Character c) {
    method multiply (line 314) | public long multiply(Long l) {
    method multiply (line 318) | public float multiply(Float f) {
    method multiply (line 322) | public double multiply(Double d) {
    method remainder (line 332) | public int remainder(Integer i) {
    method remainder (line 336) | public int remainder(Byte b) {
    method remainder (line 340) | public int remainder(Short s) {
    method remainder (line 344) | public int remainder(Character c) {
    method remainder (line 348) | public long remainder(Long l) {
    method shiftLeft (line 358) | public int shiftLeft(Integer i) {
    method shiftLeft (line 362) | public int shiftLeft(Byte b) {
    method shiftLeft (line 366) | public int shiftLeft(Short s) {
    method shiftLeft (line 370) | public int shiftLeft(Character c) {
    method shiftLeft (line 374) | public int shiftLeft(Long l) {
    method shiftRight (line 384) | public int shiftRight(Integer i) {
    method shiftRight (line 388) | public int shiftRight(Byte b) {
    method shiftRight (line 392) | public int shiftRight(Short s) {
    method shiftRight (line 396) | public int shiftRight(Character c) {
    method shiftRight (line 400) | public int shiftRight(Long l) {
    method subtract (line 410) | public int subtract(Integer i) {
    method subtract (line 414) | public int subtract(Byte b) {
    method subtract (line 418) | public int subtract(Short s) {
    method subtract (line 422) | public int subtract(Character c) {
    method subtract (line 426) | public long subtract(Long l) {
    method subtract (line 430) | public float subtract(Float f) {
    method subtract (line 434) | public double subtract(Double d) {
    method unsignedShiftRight (line 444) | public int unsignedShiftRight(Integer i) {
    method unsignedShiftRight (line 448) | public int unsignedShiftRight(Byte b) {
    method unsignedShiftRight (line 452) | public int unsignedShiftRight(Short s) {
    method unsignedShiftRight (line 456) | public int unsignedShiftRight(Character c) {
    method unsignedShiftRight (line 460) | public int unsignedShiftRight(Long l) {
    method xor (line 470) | public int xor(Integer i) {
    method xor (line 474) | public int xor(Byte b) {
    method xor (line 478) | public int xor(Short s) {
    method xor (line 482) | public int xor(Character c) {
    method xor (line 486) | public long xor(Long l) {
    method xor (line 490) | public boolean xor(Boolean b) throws Throwable {
    method to (line 500) | public RangeList to(Integer i) {
    method until (line 504) | public RangeList until(Integer i) {
    method pow (line 514) | public double pow(Integer i) {
    method pow (line 518) | public double pow(Long l) {
    method pow (line 522) | public double pow(Float f) {
    method pow (line 526) | public double pow(Double d) {
    method pow (line 530) | public double pow(Byte b) {
    method pow (line 534) | public double pow(Short s) {
    method pow (line 538) | public double pow(Character c) {

FILE: latte-compiler/src/main/java/lt/lang/implicit/RichLong.java
  class RichLong (line 8) | public class RichLong {
    method RichLong (line 11) | public RichLong(Long l) {
    method not (line 15) | public long not() {
    method negate (line 19) | public long negate() {
    method logicNot (line 23) | public boolean logicNot() throws Throwable {
    method add (line 33) | public long add(Integer i) {
    method add (line 37) | public long add(Byte b) {
    method add (line 41) | public long add(Short s) {
    method add (line 45) | public long add(Character c) {
    method add (line 49) | public long add(Long l) {
    method add (line 53) | public float add(Float f) {
    method add (line 57) | public double add(Double d) {
    method and (line 67) | public long and(Integer i) {
    method and (line 71) | public long and(Byte b) {
    method and (line 75) | public long and(Short s) {
    method and (line 79) | public long and(Character c) {
    method and (line 83) | public long and(Long l) {
    method and (line 87) | public boolean and(Boolean b) throws Throwable {
    method or (line 97) | public long or(Integer i) {
    method or (line 101) | public long or(Byte b) {
    method or (line 105) | public long or(Short s) {
    method or (line 109) | public long or(Character c) {
    method or (line 113) | public long or(Long l) {
    method or (line 117) | public boolean or(Boolean b) throws Throwable {
    method divide (line 127) | public long divide(Integer i) {
    method divide (line 131) | public long divide(Byte b) {
    method divide (line 135) | public long divide(Short s) {
    method divide (line 139) | public long divide(Character c) {
    method divide (line 143) | public long divide(Long l) {
    method divide (line 147) | public float divide(F
Condensed preview — 355 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,614K chars).
[
  {
    "path": ".gitignore",
    "chars": 302,
    "preview": "# macos #\n*/.DS_Store\n.DS_Store\n\n*.class\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# Package Files #\n*.jar\n*.war\n*.ear\n"
  },
  {
    "path": "LICENSE",
    "chars": 1079,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2016 KuiGang Wang\n\nPermission is hereby granted, free of charge, to any person obta"
  },
  {
    "path": "README.md",
    "chars": 9462,
    "preview": "# Latte-Lang\n\n[![Join the chat at https://gitter.im/latte-lang/Lobby](https://badges.gitter.im/latte-lang/Lobby.svg)](ht"
  },
  {
    "path": "TODO.md",
    "chars": 2863,
    "preview": "# Latte-lang TODOs\n\n## Modularization /2016-10-23\n\nlatte-compiler can be divided into 4 parts:\n\n* latte-compiler-scanner"
  },
  {
    "path": "build.py",
    "chars": 6715,
    "preview": "#!/usr/bin/python\n# -*- coding: utf-8 -*-\n\nimport os\nimport sys\nimport time\nfrom subprocess import Popen, PIPE\nimport zi"
  },
  {
    "path": "latte-build/.gitignore",
    "chars": 44,
    "preview": ".gradle/*\n.idea/*\nbuild/*\n*.ipr\n*.iws\nout/*\n"
  },
  {
    "path": "latte-build/build.gradle",
    "chars": 3690,
    "preview": "def VERSION_FILE = file('src/main/resources/version')\nBufferedReader br = new BufferedReader(new FileReader(VERSION_FILE"
  },
  {
    "path": "latte-build/settings.gradle",
    "chars": 34,
    "preview": "rootProject.name = 'latte-build'\n\n"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/CtrlCHandler.java",
    "chars": 283,
    "preview": "package lt.repl;\n\n/**\n * handle ctrl-c (INT) event\n */\npublic interface CtrlCHandler {\n        interface ExitCallback {\n"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/CtrlCHandlerImpl.java",
    "chars": 1678,
    "preview": "package lt.repl;\n\nimport sun.misc.Signal;\nimport sun.misc.SignalHandler;\n\n/**\n * handle ctrl-c (INT) event\n */\npublic cl"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/Entry.java",
    "chars": 15041,
    "preview": "package lt.repl;\n\nimport lt.compiler.SyntaxException;\nimport lt.repl.scripting.EvalEntry;\nimport lt.util.Utils;\n\nimport "
  },
  {
    "path": "latte-build/src/main/java/lt/repl/IO.java",
    "chars": 657,
    "preview": "package lt.repl;\n\nimport java.io.*;\n\npublic class IO {\n        public final InputStream inStream;\n        public final O"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/JLineStringReader.java",
    "chars": 1665,
    "preview": "package lt.repl;\n\nimport jline.console.ConsoleReader;\nimport jline.console.UserInterruptException;\n\nimport java.io.IOExc"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/REPL.java",
    "chars": 15360,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/SimpleStringReader.java",
    "chars": 1233,
    "preview": "package lt.repl;\n\nimport sun.misc.Signal;\nimport sun.misc.SignalHandler;\n\n/**\n * scanner line reader\n */\npublic class Si"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/StringReader.java",
    "chars": 197,
    "preview": "package lt.repl;\n\n/**\n * reads a line\n */\npublic interface StringReader {\n        void setIO(IO io);\n\n        void setCt"
  },
  {
    "path": "latte-build/src/main/java/lt/repl/VersionRetriever.java",
    "chars": 632,
    "preview": "package lt.repl;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io."
  },
  {
    "path": "latte-build/src/main/resources/version",
    "chars": 82,
    "preview": "0.0.11-ALPHA\r\n0.0.10-ALPHA\r\n0.0.9.1-ALPHA\r\n0.0.9-ALPHA\r\n0.0.8-ALPHA\r\n0.0.7-ALPHA\r\n"
  },
  {
    "path": "latte-class-recorder/.gitignore",
    "chars": 26,
    "preview": ".idea/*\n.gradle/*\nbuild/*\n"
  },
  {
    "path": "latte-class-recorder/build.gradle",
    "chars": 921,
    "preview": "def VERSION_FILE = file('../latte-build/src/main/resources/version')\nBufferedReader br = new BufferedReader(new FileRead"
  },
  {
    "path": "latte-class-recorder/settings.gradle",
    "chars": 43,
    "preview": "rootProject.name = 'latte-class-recorder'\n\n"
  },
  {
    "path": "latte-class-recorder/src/main/groovy/org/lattelang/ClassRecorder.groovy",
    "chars": 3669,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-class-recorder/src/main/resources/META-INF/gradle-plugins/org.latte-lang.class-recorder.properties",
    "chars": 54,
    "preview": "implementation-class=org.lattelang.ClassRecorderPlugin"
  },
  {
    "path": "latte-compiler/.gitignore",
    "chars": 44,
    "preview": ".idea/*\n.gradle/*\nbuild/*\n*.ipr\n*.iws\nout/*\n"
  },
  {
    "path": "latte-compiler/build.gradle",
    "chars": 3615,
    "preview": "def VERSION_FILE = file('../latte-build/src/main/resources/version')\nBufferedReader br = new BufferedReader(new FileRead"
  },
  {
    "path": "latte-compiler/settings.gradle",
    "chars": 36,
    "preview": "rootProject.name = 'latte-compiler'\n"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/AbstractScanner.java",
    "chars": 17328,
    "preview": "package lt.compiler;\n\nimport lt.compiler.lexical.*;\nimport lt.compiler.syntactic.UnknownTokenException;\n\nimport java.io."
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/BraceScanner.java",
    "chars": 22119,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/CodeGenerator.java",
    "chars": 108015,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/CodeInfo.java",
    "chars": 4021,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/CompileException.java",
    "chars": 1605,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/CompileUtil.java",
    "chars": 26251,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/ErrorManager.java",
    "chars": 12898,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/IndentScanner.java",
    "chars": 30681,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/LineCol.java",
    "chars": 2437,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/LtBug.java",
    "chars": 1494,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/MultipleClassLoader.java",
    "chars": 4927,
    "preview": "package lt.compiler;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.lang.reflect.InvocationTargetE"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/Parser.java",
    "chars": 176221,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/Properties.java",
    "chars": 332,
    "preview": "package lt.compiler;\n\n/**\n * properties for the scanner\n */\npublic class Properties {\n        /**\n         * base of lin"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/PushLineBackReader.java",
    "chars": 1256,
    "preview": "package lt.compiler;\n\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.Reader;\nimport java.util"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/SClassWriter.java",
    "chars": 1681,
    "preview": "package lt.compiler;\n\nimport lt.compiler.semantic.SClassDef;\nimport lt.compiler.semantic.SInterfaceDef;\nimport lt.compil"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/Scanner.java",
    "chars": 1375,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/ScannerSwitcher.java",
    "chars": 3003,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/SemanticProcessor.java",
    "chars": 669445,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/SemanticScope.java",
    "chars": 6992,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/SyntaxException.java",
    "chars": 2030,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/UnexpectedEndException.java",
    "chars": 1400,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/UnexpectedTokenException.java",
    "chars": 1634,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/Args.java",
    "chars": 3107,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/Element.java",
    "chars": 3418,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/ElementStartNode.java",
    "chars": 3468,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/EndingNode.java",
    "chars": 2773,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/IllegalIndentationException.java",
    "chars": 1562,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/Indent.java",
    "chars": 893,
    "preview": "package lt.compiler.lexical;\n\n/**\n * indentation\n */\npublic class Indent {\n        public static final int FLEX = -1;\n\n "
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/Node.java",
    "chars": 3629,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/PairEntry.java",
    "chars": 1474,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/lexical/TokenType.java",
    "chars": 1353,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/ConstantValue.java",
    "chars": 1313,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/DummyValue.java",
    "chars": 350,
    "preview": "package lt.compiler.semantic;\n\n/**\n * a value without actual value, only a type\n */\npublic class DummyValue implements V"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/ExceptionTable.java",
    "chars": 1953,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/Ins.java",
    "chars": 49164,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/Instruction.java",
    "chars": 1339,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/InvokableMeta.java",
    "chars": 228,
    "preview": "package lt.compiler.semantic;\n\nimport java.util.HashSet;\nimport java.util.Set;\n\n/**\n * meta data about invokable\n */\npub"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/LeftValue.java",
    "chars": 1974,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/LocalVariable.java",
    "chars": 2845,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/MethodTypeValue.java",
    "chars": 2121,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/PointerType.java",
    "chars": 623,
    "preview": "package lt.compiler.semantic;\n\nimport lt.compiler.LineCol;\n\n/**\n * pointer type\n */\npublic class PointerType extends STy"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/PrimitiveTypeDef.java",
    "chars": 1544,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/PrimitiveValue.java",
    "chars": 1253,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/ReadOnly.java",
    "chars": 1278,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SAnno.java",
    "chars": 2906,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SAnnoDef.java",
    "chars": 4500,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SAnnoField.java",
    "chars": 2682,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SAnnotationPresentable.java",
    "chars": 1306,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SArrayTypeDef.java",
    "chars": 3767,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SArrayValue.java",
    "chars": 2113,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SClassDef.java",
    "chars": 4865,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SConstructorDef.java",
    "chars": 1431,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SFieldDef.java",
    "chars": 2815,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SInterfaceDef.java",
    "chars": 4260,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SInvokable.java",
    "chars": 2356,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SMember.java",
    "chars": 2145,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SMethodDef.java",
    "chars": 2778,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SModifier.java",
    "chars": 1659,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SParameter.java",
    "chars": 3994,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/SRefTypeDef.java",
    "chars": 775,
    "preview": "package lt.compiler.semantic;\n\nimport lt.compiler.LineCol;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * r"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/STypeDef.java",
    "chars": 2450,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/Value.java",
    "chars": 1297,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/ValueAnotherType.java",
    "chars": 739,
    "preview": "package lt.compiler.semantic;\n\nimport lt.compiler.LineCol;\n\n/**\n * value considered as another type\n */\npublic class Val"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/ValuePack.java",
    "chars": 2625,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/VoidType.java",
    "chars": 1743,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/BoolTypeDef.java",
    "chars": 1688,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/BoolValue.java",
    "chars": 2162,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/ByteTypeDef.java",
    "chars": 1583,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/ByteValue.java",
    "chars": 2140,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/CharTypeDef.java",
    "chars": 1583,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/CharValue.java",
    "chars": 2145,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/DoubleTypeDef.java",
    "chars": 1943,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/DoubleValue.java",
    "chars": 2949,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/EnumValue.java",
    "chars": 1870,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/FloatTypeDef.java",
    "chars": 2020,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/FloatValue.java",
    "chars": 2680,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/IntTypeDef.java",
    "chars": 1915,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/IntValue.java",
    "chars": 2557,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/LongTypeDef.java",
    "chars": 1920,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/LongValue.java",
    "chars": 2810,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/NullTypeDef.java",
    "chars": 1839,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/NullValue.java",
    "chars": 1712,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/ShortTypeDef.java",
    "chars": 1590,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/ShortValue.java",
    "chars": 2139,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/builtin/StringConstantValue.java",
    "chars": 2499,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/helper/ASTGHolder.java",
    "chars": 972,
    "preview": "package lt.compiler.semantic.helper;\n\nimport lt.compiler.semantic.STypeDef;\nimport lt.compiler.syntactic.Statement;\n\nimp"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/semantic/helper/HalfAppliedTypes.java",
    "chars": 1268,
    "preview": "package lt.compiler.semantic.helper;\n\nimport lt.compiler.LtBug;\nimport lt.compiler.SyntaxException;\nimport lt.compiler.s"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/AST.java",
    "chars": 66201,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/Definition.java",
    "chars": 1250,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/DuplicateVariableNameException.java",
    "chars": 1521,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/Expression.java",
    "chars": 1250,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/Literal.java",
    "chars": 2712,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/Operation.java",
    "chars": 1877,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/Pre.java",
    "chars": 1236,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/Statement.java",
    "chars": 1747,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/UnexpectedNewLayerException.java",
    "chars": 1549,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/UnknownTokenException.java",
    "chars": 1494,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/AnnotationDef.java",
    "chars": 1938,
    "preview": "package lt.compiler.syntactic.def;\n\nimport lt.compiler.CompileUtil;\nimport lt.compiler.LineCol;\nimport lt.compiler.synta"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/ClassDef.java",
    "chars": 6607,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/FunDef.java",
    "chars": 3560,
    "preview": "package lt.compiler.syntactic.def;\n\nimport lt.compiler.CompileUtil;\nimport lt.compiler.LineCol;\nimport lt.compiler.synta"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/InterfaceDef.java",
    "chars": 5265,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/MethodDef.java",
    "chars": 5096,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/ObjectDef.java",
    "chars": 4529,
    "preview": "package lt.compiler.syntactic.def;\n\nimport lt.compiler.CompileUtil;\nimport lt.compiler.LineCol;\nimport lt.compiler.synta"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/def/VariableDef.java",
    "chars": 5358,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/literal/BoolLiteral.java",
    "chars": 1696,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/literal/NumberLiteral.java",
    "chars": 1704,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/literal/StringLiteral.java",
    "chars": 1718,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/operation/OneVariableOperation.java",
    "chars": 3450,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/operation/TwoVariableOperation.java",
    "chars": 3379,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/operation/UnaryOneVariableOperation.java",
    "chars": 3455,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/pre/Import.java",
    "chars": 4099,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/pre/Modifier.java",
    "chars": 2722,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/syntactic/pre/PackageDeclare.java",
    "chars": 2452,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/util/BindList.java",
    "chars": 1249,
    "preview": "package lt.compiler.util;\n\nimport java.util.AbstractList;\nimport java.util.List;\n\n/**\n * bind 2 lists into one\n */\npubli"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/util/Consts.java",
    "chars": 538,
    "preview": "package lt.compiler.util;\n\n/**\n * the flags\n */\npublic class Consts {\n        public static final int IS_POINTER_SET = 1"
  },
  {
    "path": "latte-compiler/src/main/java/lt/compiler/util/LocalVariables.java",
    "chars": 3843,
    "preview": "package lt.compiler.util;\n\nimport lt.compiler.CodeInfo;\nimport lt.compiler.LtBug;\nimport lt.compiler.SemanticScope;\nimpo"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/AnnotationVisitor.java",
    "chars": 6382,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/AnnotationWriter.java",
    "chars": 13278,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Attribute.java",
    "chars": 10249,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/ByteVector.java",
    "chars": 11092,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/ClassReader.java",
    "chars": 98604,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/ClassVisitor.java",
    "chars": 12969,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/ClassWriter.java",
    "chars": 63709,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Context.java",
    "chars": 4411,
    "preview": "/***\r\n * ASM: a very small and fast Java bytecode manipulation framework\r\n * Copyright (c) 2000-2011 INRIA, France Telec"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Edge.java",
    "chars": 3172,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/FieldVisitor.java",
    "chars": 5625,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/FieldWriter.java",
    "chars": 11142,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Frame.java",
    "chars": 48265,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Handle.java",
    "chars": 7849,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Handler.java",
    "chars": 4205,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Item.java",
    "chars": 10335,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Label.java",
    "chars": 22687,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/MethodVisitor.java",
    "chars": 36289,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/MethodWriter.java",
    "chars": 111064,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Opcodes.java",
    "chars": 11720,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/Type.java",
    "chars": 29585,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/TypePath.java",
    "chars": 7043,
    "preview": "/***\r\n * ASM: a very small and fast Java bytecode manipulation framework\r\n * Copyright (c) 2000-2013 INRIA, France Telec"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/TypeReference.java",
    "chars": 17996,
    "preview": "/***\r\n * ASM: a very small and fast Java bytecode manipulation framework\r\n * Copyright (c) 2000-2013 INRIA, France Telec"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/package.html",
    "chars": 4363,
    "preview": "<html>\n<!--\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France "
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/signature/SignatureReader.java",
    "chars": 8479,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/signature/SignatureVisitor.java",
    "chars": 7421,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/signature/SignatureWriter.java",
    "chars": 6282,
    "preview": "/***\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France Telecom"
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/asm/signature/package.html",
    "chars": 1744,
    "preview": "<html>\n<!--\n * ASM: a very small and fast Java bytecode manipulation framework\n * Copyright (c) 2000-2011 INRIA, France "
  },
  {
    "path": "latte-compiler/src/main/java/lt/dependencies/package-info.java",
    "chars": 430,
    "preview": "/**\n * Latte lang 's repackaging of all depended libraries<br>\n * the repackaging avoids any potential conflicts with de"
  },
  {
    "path": "latte-compiler/src/main/java/lt/generator/AbstractSourceGenerator.java",
    "chars": 1997,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/generator/SourceGenerator.java",
    "chars": 2684,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/FunctionalAbstractClass.java",
    "chars": 1998,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/FunctionalInterface.java",
    "chars": 367,
    "preview": "package lt.lang;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport java.lang.annot"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/GenericTemplate.java",
    "chars": 335,
    "preview": "package lt.lang;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimport java.lang.annot"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/Pointer.java",
    "chars": 2570,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/Unit.java",
    "chars": 1542,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/ast.java",
    "chars": 1825,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function.java",
    "chars": 1274,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function0.java",
    "chars": 1350,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function1.java",
    "chars": 1355,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function10.java",
    "chars": 1446,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function11.java",
    "chars": 1470,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function12.java",
    "chars": 1478,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function13.java",
    "chars": 1486,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function14.java",
    "chars": 1494,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function15.java",
    "chars": 1502,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function16.java",
    "chars": 1526,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function17.java",
    "chars": 1534,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function18.java",
    "chars": 1552,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function19.java",
    "chars": 1560,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function2.java",
    "chars": 1364,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function20.java",
    "chars": 1568,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function21.java",
    "chars": 1594,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function22.java",
    "chars": 1602,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function23.java",
    "chars": 1610,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function24.java",
    "chars": 1618,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function25.java",
    "chars": 1626,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function26.java",
    "chars": 1652,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  },
  {
    "path": "latte-compiler/src/main/java/lt/lang/function/Function3.java",
    "chars": 1372,
    "preview": "/*\n * The MIT License (MIT)\n *\n * Copyright (c) 2016 KuiGang Wang\n *\n * Permission is hereby granted, free of charge, to"
  }
]

// ... and 155 more files (download for full content)

About this extraction

This page contains the full source code of the wkgcass/Latte-lang GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 355 files (3.3 MB), approximately 885.7k tokens, and a symbol index with 3936 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!