Exemplo n.º 1
0
expr *create_cell(expr *head, expr *tail) {
  expr *e = make_expr();
  e->type = CELL_EXPR;
  e->head = head;
  e->tail = tail;
  return e;
}
Exemplo n.º 2
0
ExprType *make_expr() {
    MathType top = terms[--termtop];
    ExprType *result = NULL;

    if (top.kind == Op) {
        result = (ExprType *) malloc(sizeof (ExprType));
        result->number = False;
        result->op = top.operation;
        result->op2 = make_expr();
        result->op1 = make_expr();
    } else if (top.kind == Value) {
        result = (ExprType *) malloc(sizeof (ExprType));
        result->number = True;
        result->value = top.value;
    }

    return result;
}
Exemplo n.º 3
0
expr *create_func(expr *arguments, struct scope *closure, expr *body, bool ismacro) {
  expr *e = make_expr();
  e->type = FUNC_EXPR;
  e->arguments = arguments;
  e->closure = closure;
  e->body = body;
  e->ismacro = ismacro;
  return e;
}
Exemplo n.º 4
0
static void handle_data_offset(char *s,int size,int offset)
{
  for (;;) {
    char *opstart = s;
    operand *op;
    dblock *db = NULL;

    if (size==8 && (*s=='\"' || *s=='\'')) {
      if (db = parse_string(&opstart,*s,8)) {
        if (offset != 0) {
          int i;

          for (i=0; i<db->size; i++)
            db->data[i] = db->data[i] + offset;
        }
        add_atom(0,new_data_atom(db,1));
        s = opstart;
      }
    }
    if (!db) {
      op = new_operand();
      s = skip_operand(s);
      if (parse_operand(opstart,s-opstart,op,DATA_OPERAND(size))) {
        atom *a;

        if (offset != 0)
          op->value = make_expr(ADD,number_expr(offset),op->value);
        a = new_datadef_atom(abs(size),op);
        a->align = 1;
        add_atom(0,a);
      }
      else
        syntax_error(8);  /* invalid data operand */
    }

    s = skip(s);
    if (*s == ',') {
      s = skip(s+1);
    }
    else if (*s == commentchar) {
      break;
    }
    else if (*s) {
      syntax_error(9);  /* , expected */
      return;
    }
    else
      break;
  }

  eol(s);
}
Exemplo n.º 5
0
int main(int argc, char** argv) {
    struct timeval t;

    for(int i=0; i<1000; i++) {
        gettimeofday(&t, NULL);
        long start_time = t.tv_usec;
        terms = make_terms(argc, argv);
        termtop = argc - 1;
        ExprType *expr = make_expr();
        long result = calculate(expr);
        gettimeofday(&t, NULL);
        long end_time = t.tv_usec;
        printf("C\ttime = %ld\tresult = %ld\n", end_time - start_time, result);
    }
    return 0;
}
Exemplo n.º 6
0
Arquivo: syntax.c Projeto: kusma/vasm
static void handle_assert(char *s)
{
  char *expstr = s;
  expr *aexp = NULL;

  do {
    s = skip(s);
    if (aexp)  /* concat. expressions with log. AND */
      aexp = make_expr(LAND,aexp,parse_expr(&s));
    else
      aexp = parse_expr(&s);
    simplify_expr(aexp);
    s = skip(s);
  }
  while (*s++ == ',');  /* another assertion, separated by comma? */

  s--;
  add_atom(0,new_assert_atom(aexp,cnvstr(expstr,s-expstr),NULL));
  eol(s);
}
Exemplo n.º 7
0
expr *create_builtin(builtin func_ptr) {
  expr *e = make_expr();
  e->type = BUILTIN_EXPR;
  e->func_ptr = func_ptr;
  return e;
}
Exemplo n.º 8
0
expr *create_symbol(const char *value) {
  expr *e = make_expr();
  e->type = SYMBOL_EXPR;
  e->string_value = value;
  return e;
}
Exemplo n.º 9
0
expr *create_string(const char *value) {
  expr *e = make_expr();
  e->type = STRING_EXPR;
  e->string_value = value;
  return e;
}
Exemplo n.º 10
0
expr *create_bool(bool value) {
  expr *e = make_expr();
  e->type = BOOL_EXPR;
  e->boolean_value = value;
  return e;
}
Exemplo n.º 11
0
expr *create_int(int value) {
  expr *e = make_expr();
  e->type = INT_EXPR;
  e->int_value = value;
  return e;
}