示例#1
0
  public Value evaluate(Context cx, ClassDefinitionNode node) {
    if (doing_class) return null;
    doing_class =
        true; // inner classes are included multiple times in node->staticinits.  Don't double
              // evaluate them.

    cx.pushStaticClassScopes(node);

    if (node.statements != null) node.statements.evaluate(cx, this);

    // now do the nested classes
    doing_class = false;
    {
      for (ClassDefinitionNode it : node.clsdefs) {
        it.evaluate(cx, this);
      }
    }

    cx.pushScope(node.iframe);

    {
      for (Node init : node.instanceinits) {
        if (cx.statics.es4_nullability && !init.isDefinition()) node.iframe.setInitOnly(true);

        init.evaluate(cx, this);

        if (cx.statics.es4_nullability && !init.isDefinition()) node.iframe.setInitOnly(false);
      }
    }

    cx.popScope(); // iframe
    cx.popStaticClassScopes(node);

    ClassDefinitionNode cdn = node;
    ReferenceValue ref = cdn.ref;
    Slot classSlot = null;
    if (ref != null) classSlot = ref.getSlot(cx);
    if (debugging) {
      addPositionMetadata(cx, cdn);
    }
    if (classSlot != null && classSlot.getMetadata() == null && cdn.metaData != null)
      for (Node meta_node : cdn.metaData.items) {
        if (meta_node instanceof MetaDataNode) {
          addMetadataToSlot(cx, classSlot, (MetaDataNode) meta_node);
          int i = isVersionMetadata(cx, (MetaDataNode) meta_node);
          if (i > -1) cdn.version = i;
        }
      }

    return null;
  }
示例#2
0
  public static void addImport(Context context, ClassDefinitionNode node, String packageName) {
    NodeFactory nodeFactory = new NodeFactory(context);

    PackageIdentifiersNode packageIdentifiers = null;

    StringTokenizer stringTokenizer = new StringTokenizer(packageName, ".");

    while (stringTokenizer.hasMoreTokens()) {
      String token = stringTokenizer.nextToken();

      IdentifierNode identifier = nodeFactory.identifier(token);

      packageIdentifiers = nodeFactory.packageIdentifiers(packageIdentifiers, identifier, true);
    }

    PackageNameNode packageNameNode = nodeFactory.packageName(packageIdentifiers);

    ImportDirectiveNode importDirective =
        nodeFactory.importDirective(null, packageNameNode, null, context);

    importDirective.pkgdef = node.pkgdef;

    if (node.statements == null) {
      node.statements = new StatementListNode(null);
    }

    node.statements.items.add(0, importDirective);
  }