Package loop.ast.script

Examples of loop.ast.script.Unit



  @Test
  public final void emitJavaBeanPropertyCall() throws Exception {
    Parser parser = new LexprParser(new Tokenizer("main() ->\n  new java.util.Date(1).time\n").tokenize());
    Unit unit = parser.script(file);
    unit.reduceAll();

    Class<?> generated = new AsmCodeEmitter(unit).write(unit);

    // Inspect.
    inspect(generated);
View Full Code Here



  @Test
  public final void emitListComprehension() throws Exception {
    Parser parser = new LexprParser(new Tokenizer("sum(ls) ->\n  i for i in ls if i < 25\n").tokenize());
    Unit unit = parser.script(file);
    unit.reduceAll();

    Class<?> generated = new AsmCodeEmitter(unit).write(unit);

    // Inspect.
    inspect(generated);
View Full Code Here


  @Test
  public final void emitIfStatement() throws Exception {
    Parser parser = new LexprParser(new Tokenizer("sum(cond) ->\n  if cond then 1 else 2\n").tokenize());
    Unit unit = parser.script(file);
    unit.reduceAll();

    Class<?> generated = new AsmCodeEmitter(unit).write(unit);

    // Inspect.
    inspect(generated);
View Full Code Here

        "func() ->\n  @() ->\n    @() ->\n      func(@() ->\n    4\n)");
  }

  static void compareFunction(String functionName, String expected, String input) {
    Parser parser = new LexprParser(new Tokenizer(input).tokenize());
    Unit unit = parser.script(null);
    Assert.assertNotNull("Parser returned no output", unit);

    FunctionDecl function = unit.resolveFunction(functionName, false);
    Assert.assertNotNull("No such function " + functionName, function);


    String stringified = LexprParser.stringify(function);
View Full Code Here

      System.out.println("Profiling loop script:");
      System.out.println(script);
      System.out.println("\n\n");
    }
    Parser parser = new LexprParser(new Tokenizer(script).tokenize());
    Unit unit = parser.script(null);
    unit.reduceAll();

    // Compile ASM.
    Class<?> generated = new AsmCodeEmitter(unit).write(unit);
    Method asmCallable = javaCallable.lookup(generated);
View Full Code Here

  private Unit parse(String input) {
    Parser parser = isLisp
        ? new SexprParser(new Tokenizer(input).tokenize())
        : new LexprParser(new Tokenizer(input).tokenize());
    Unit unit = null;
    try {
      unit = parser.script(file);
      unit.reduceAll();

      this.scope = unit;
    } catch (RuntimeException e) {
      // Ignored.
      System.out.println("Parse errors exist.");
View Full Code Here

    }
    return null;
  }

  public void compile() {
    Unit unit = parse(source);
    if (hasErrors())
      return;

    // Recursively loads and compiles all dependency modules.
    List<AnnotatedError> depErrors = unit.loadDeps(file);
    if (depErrors != null) {
      this.staticErrors = depErrors;
      return;
    }

    // Run the verifier just before we emit code.
    if (!verify(unit))
      return;

    AsmCodeEmitter codeEmitter = new AsmCodeEmitter(unit);
    this.scope = unit;
    this.compiled = codeEmitter.write(unit);

    requireJavaImports(unit.imports());

    this.source = null;
  }
View Full Code Here

    ConsoleReader reader = new ConsoleReader();
    try {
      reader.setExpandEvents(false);
      reader.addCompleter(new MetaCommandCompleter());

      Unit shellScope = new Unit(null, ModuleDecl.SHELL);
      FunctionDecl main = new FunctionDecl("main", null);
      shellScope.declare(main);
      shellContext = new HashMap<String, Object>();

      boolean inFunction = false;

      // Used to build up multiline statement blocks (like functions)
      StringBuilder block = null;
      //noinspection InfiniteLoopStatement
      do {
        String prompt = (block != null) ? "|    " : ">> ";
        String rawLine = reader.readLine(prompt);

        if (inFunction) {
          if (rawLine == null || rawLine.trim().isEmpty()) {
            inFunction = false;

            // Eval the function to verify it.
            printResult(Loop.evalClassOrFunction(block.toString(), shellScope));
            block = null;
            continue;
          }

          block.append(rawLine).append('\n');
          continue;
        }

        if (rawLine == null) {
          quit(reader);
        }

        //noinspection ConstantConditions
        String line = rawLine.trim();
        if (line.isEmpty())
          continue;

        // Add a require import.
        if (line.startsWith("require ")) {
          shellScope.declare(new LexprParser(new Tokenizer(line + '\n').tokenize()).require());
          shellScope.loadDeps("<shell>");
          continue;
        }

        if (line.startsWith(":q") || line.startsWith(":quit")) {
          quit(reader);
        }

        if (line.startsWith(":h") || line.startsWith(":help")) {
          printHelp();
        }

        if (line.startsWith(":run")) {
          String[] split = line.split("[ ]+", 2);
          if (split.length < 2 || !split[1].endsWith(".loop"))
            System.out.println("You must specify a .loop file to run.");
          Loop.run(split[1]);
          continue;
        }

        if (line.startsWith(":r") || line.startsWith(":reset")) {
          System.out.println("Context reset.");
          shellScope = new Unit(null, ModuleDecl.SHELL);
          main = new FunctionDecl("main", null);
          shellScope.declare(main);
          shellContext = new HashMap<String, Object>();
          continue;
        }
        if (line.startsWith(":i") || line.startsWith(":imports")) {
          for (RequireDecl requireDecl : shellScope.imports()) {
            System.out.println(requireDecl.toSymbol());
          }
          System.out.println();
          continue;
        }
        if (line.startsWith(":f") || line.startsWith(":functions")) {
          for (FunctionDecl functionDecl : shellScope.functions()) {
            StringBuilder args = new StringBuilder();
            List<Node> children = functionDecl.arguments().children();
            for (int i = 0, childrenSize = children.size(); i < childrenSize; i++) {
              Node arg = children.get(i);
              args.append(arg.toSymbol());
View Full Code Here

    );
  }

  static void compareType(String typeName, String expected, String input) {
    Parser parser = new LexprParser(new Tokenizer(input).tokenize());
    Unit unit = parser.script(null);
    Assert.assertNotNull("Parser returned no output", unit);

    ClassDecl clazz = unit.getType(typeName);
    Assert.assertNotNull("No such type " + typeName, clazz);


    String stringified = LexprParser.stringify(clazz);
View Full Code Here

TOP

Related Classes of loop.ast.script.Unit

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.