/**
   * Generates code for the string constant definition. This method is incomplete; you get to finish
   * it up in programming assignment 5.
   *
   * @param stringclasstag the class tag for string object
   * @param s the output stream
   */
  public void codeDef(int stringclasstag, PrintStream s) {
    IntSymbol lensym = (IntSymbol) AbstractTable.inttable.addInt(str.length());

    // Add -1 eye catcher
    s.println(CgenSupport.WORD + "-1");
    codeRef(s);
    s.print(CgenSupport.LABEL); // label
    s.println(CgenSupport.WORD + stringclasstag); // tag
    s.println(
        CgenSupport.WORD
            + (CgenSupport.DEFAULT_OBJFIELDS
                + CgenSupport.STRING_SLOTS
                + (str.length() + 4) / 4)); // object size
    s.print(CgenSupport.WORD);

    /* Add code to reference the dispatch table for class String here */
    CgenSupport.emitDispTableRef(TreeConstants.Str, s);
    s.println(""); // dispatch table
    s.print(CgenSupport.WORD);
    lensym.codeRef(s);
    s.println(""); // length
    CgenSupport.emitStringConstant(str, s); // ascii string
    s.print(CgenSupport.ALIGN); // align to word
  }
 public static void codeRefByString(String str, PrintStream s) {
   StringSymbol symbol = (StringSymbol) AbstractTable.stringtable.lookup(str);
   symbol.codeRef(s);
 }