Package com.stuffwithstuff.magpie.ast.pattern

Examples of com.stuffwithstuff.magpie.ast.pattern.Pattern


   
    return allowExpressionAfterBlock(Expr.match(span.end(), value, cases));
  }
 
  private MatchCase parseCase() {
    Pattern pattern = PatternParser.parse(this);

    consume(TokenType.THEN);
   
    Pair<Expr, Token> bodyParse = parseExpressionOrBlock(
        TokenType.ELSE, TokenType.END, TokenType.CASE);
View Full Code Here


        eachLoop.add(Expr.if_(condition,
            Expr.nothing(),
            Expr.break_(condition.getPosition())));
      } else {
        PositionSpan iteratorSpan = span();
        Pattern pattern = PatternParser.parse(this);
        consume(TokenType.IN);
        Expr generator = parseExpression();
        Position position = iteratorSpan.end();
       
        // Initialize the iterator before the loop.
View Full Code Here

    return Expr.throw_(span.end(), value);
  }
 
  private Expr parseVar(boolean isMutable) {
    PositionSpan span = span();
    Pattern pattern = PatternParser.parse(this);
    consume(TokenType.EQ);
    Expr value = parseExpressionOrBlock();
   
    return Expr.var(span.end(), isMutable, pattern, value);
  }
View Full Code Here

   
    return new Pair<Expr, Token>(expr, endToken);
  }
 
  private MatchCase parseCatch(TokenType[] endTokens) {
    Pattern pattern = PatternParser.parse(this);

    consume(TokenType.THEN);

    Pair<Expr, Token> body = parseExpressionOrBlock(false, endTokens);
View Full Code Here

  private Obj evaluateCases(Obj value, List<MatchCase> cases, Scope scope) {
    if (cases == null) return null;
   
    for (MatchCase matchCase : cases) {
      Pattern pattern = matchCase.getPattern();
      if (PatternTester.test(mContext, pattern, value, scope)) {
        // Matched. Bind variables and evaluate the body.
        scope = scope.push();
        PatternBinder.bind(mContext, false, pattern, value, scope);
        return evaluate(matchCase.getBody(), scope);
View Full Code Here

      return left;
    }

    @Override
    public boolean isMatchingMethod(Obj value, Context context, Callable method) {
      Pattern leftParam = ((RecordPattern)method.getPattern()).getFields().get(Name.getTupleField(0));
      return PatternTester.test(context, leftParam, value, method.getClosure());
    }
View Full Code Here

     
      // Create a local scope for the function.
      Scope scope = mScope.push();
     
      // Bind the arguments to the pattern.
      Pattern pattern = mFunction.getPattern();
      PatternBinder.bind(context, false, pattern, arg, scope);
     
      try {
        return context.evaluate(mFunction.getBody(), scope);
      } catch (ReturnException ex) {
View Full Code Here

    }

    for (Callable method : multimethod.getMethods()) {
      if(shouldDisplayMethod(method)) {
        RecordPattern pattern = (RecordPattern) method.getPattern();
        Pattern leftParam = pattern.getFields().get(Name.getTupleField(0));
        Pattern rightParam = pattern.getFields().get(Name.getTupleField(1));
 
        String leftText = leftParam.toString();
        if (leftText.equals("nothing")) {
          leftText = "";
        } else {
          leftText = "(" + leftText + ") ";
        }
 
        String rightText = rightParam.toString();
        if (rightText.equals("nothing")) {
          if (leftText.equals("")) {
            rightText = "()";
          } else {
            rightText = "";
View Full Code Here

  public void defineMethod(String signature, String doc, Method method) {
    MagpieParser parser = new MagpieParser(signature);
    Pair<String, Pattern> parsed = parser.parseSignature();

    String name = parsed.getKey();
    Pattern pattern = parsed.getValue();
   
    Scope scope = mInterpreter.getBaseModule().getScope();
   
    // Construct the method.
    Callable callable = new IntrinsicCallable(pattern, doc, new MethodWrapper(method), scope);
View Full Code Here

  }
 
  @Override
  public Pattern getPattern() {
    // The receiver should be the class object itself.
    Pattern receiver = Pattern.value(Expr.name(mClass.getName()));
   
    // The argument should be a record with fields for each declared field
    // in the class.
    Map<String, Pattern> fields = new HashMap<String, Pattern>();
    for (Entry<String, FieldObj> field : mClass.getFieldDefinitions().entrySet()) {
      // Only care about fields that don't have initializers.
      if (field.getValue().getInitializer() == null) {
        fields.put(field.getKey(), field.getValue().getPattern());
      }
    }

    Pattern argument = Pattern.record(fields);
   
    return Pattern.record(receiver, argument);
  }
View Full Code Here

TOP

Related Classes of com.stuffwithstuff.magpie.ast.pattern.Pattern

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.