aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/opengl/host/tools/emugen/EntryPoint.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/opengl/host/tools/emugen/EntryPoint.cpp')
-rw-r--r--emulator/opengl/host/tools/emugen/EntryPoint.cpp349
1 files changed, 0 insertions, 349 deletions
diff --git a/emulator/opengl/host/tools/emugen/EntryPoint.cpp b/emulator/opengl/host/tools/emugen/EntryPoint.cpp
deleted file mode 100644
index cc3bef1..0000000
--- a/emulator/opengl/host/tools/emugen/EntryPoint.cpp
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
-* Copyright (C) 2011 The Android Open Source Project
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-#include "EntryPoint.h"
-
-#include "Parser.h"
-#include "TypeFactory.h"
-#include "strUtils.h"
-
-#include <sstream>
-#include <string>
-
-#include <stdio.h>
-
-EntryPoint::EntryPoint()
-{
- reset();
-}
-
-EntryPoint::~EntryPoint()
-{
-}
-
-void EntryPoint::reset()
-{
- m_unsupported = false;
- m_customDecoder = false;
- m_notApi = false;
- m_flushOnEncode = false;
- m_vars.empty();
-}
-
-// return true for valid line (need to get into the entry points list)
-bool EntryPoint::parse(unsigned int lc, const std::string & str)
-{
- size_t pos, last;
- std::string field;
-
- reset();
- std::string linestr = trim(str);
-
- if (linestr.size() == 0) return false;
- if (linestr.at(0) == '#') return false;
-
- // skip PREFIX
- field = getNextToken(linestr, 0, &last, "(");
- pos = last + 1;
- // return type
- field = getNextToken(linestr, pos, &last, ",)");
-
- std::string error;
- std::string retTypeName;
- if (!parseTypeDeclaration(field, &retTypeName, &error)) {
- fprintf(stderr,
- "line: %d: Parsing error in field <%s>: %s\n",
- lc,
- field.c_str(),
- error.c_str());
- return false;
- }
- pos = last + 1;
- const VarType *theType = TypeFactory::instance()->getVarTypeByName(retTypeName);
- if (theType->name() == "UNKNOWN") {
- fprintf(stderr, "UNKNOWN retval: %s\n", linestr.c_str());
- }
-
- m_retval.init(std::string(""),
- theType,
- std::string(""),
- Var::POINTER_OUT,
- std::string(""),
- std::string(""));
-
- // function name
- m_name = getNextToken(linestr, pos, &last, ",)");
- pos = last + 1;
-
- // parameters;
- int nvars = 0;
- while (pos < linestr.size() - 1) {
- field = getNextToken(linestr, pos, &last, ",)");
- if (field == "void") {
- // 'void' is used as a special case for functions that don't take
- // parameters at all.
- break;
- }
- std::string vartype, varname;
- if (!parseParameterDeclaration(field, &vartype, &varname, &error)) {
- fprintf(stderr,
- "line: %d: Parsing error in field <%s>\n",
- lc,
- field.c_str(),
- error.c_str());
- return false;
- }
- nvars++;
- const VarType *v = TypeFactory::instance()->getVarTypeByName(vartype);
- if (v->id() == 0) {
- fprintf(stderr, "%d: Unknown type: %s\n", lc, vartype.c_str());
- } else {
- if (varname == "" &&
- !(v->name() == "void" && !v->isPointer())) {
- std::ostringstream oss;
- oss << "var" << nvars;
- varname = oss.str();
- }
-
- m_vars.push_back(Var(varname, v, std::string(""), Var::POINTER_IN, "", ""));
- }
- pos = last + 1;
- }
- return true;
-}
-
-void EntryPoint::print(FILE *fp, bool newline,
- const std::string & name_suffix,
- const std::string & name_prefix,
- const std::string & ctx_param ) const
-{
- fprintf(fp, "%s %s%s%s(",
- m_retval.type()->name().c_str(),
- name_prefix.c_str(),
- m_name.c_str(),
- name_suffix.c_str());
-
- if (ctx_param != "") fprintf(fp, "%s ", ctx_param.c_str());
-
- for (size_t i = 0; i < m_vars.size(); i++) {
- if (m_vars[i].isVoid()) continue;
- if (i != 0 || ctx_param != "") fprintf(fp, ", ");
- fprintf(fp, "%s %s", m_vars[i].type()->name().c_str(),
- m_vars[i].name().c_str());
- }
- fprintf(fp, ")%s", newline? "\n" : "");
-}
-
-Var * EntryPoint::var(const std::string & name)
-{
- Var *v = NULL;
- for (size_t i = 0; i < m_vars.size(); i++) {
- if (m_vars[i].name() == name) {
- v = &m_vars[i];
- break;
- }
- }
- return v;
-}
-
-bool EntryPoint::hasPointers()
-{
- bool pointers = false;
- if (m_retval.isPointer()) pointers = true;
- if (!pointers) {
- for (size_t i = 0; i < m_vars.size(); i++) {
- if (m_vars[i].isPointer()) {
- pointers = true;
- break;
- }
- }
- }
- return pointers;
-}
-
-int EntryPoint::setAttribute(const std::string &line, size_t lc)
-{
- size_t pos = 0;
- size_t last;
- std::string token = getNextToken(line, 0, &last, WHITESPACE);
-
- if (token == "len") {
- pos = last;
- std::string varname = getNextToken(line, pos, &last, WHITESPACE);
-
- if (varname.size() == 0) {
- fprintf(stderr, "ERROR: %u: Missing variable name in 'len' attribute\n", (unsigned int)lc);
- return -1;
- }
- Var * v = var(varname);
- if (v == NULL) {
- fprintf(stderr, "ERROR: %u: variable %s is not a parameter of %s\n",
- (unsigned int)lc, varname.c_str(), name().c_str());
- return -2;
- }
- // set the size expression into var
- pos = last;
- v->setLenExpression(line.substr(pos));
- } else if (token == "param_check") {
- pos = last;
- std::string varname = getNextToken(line, pos, &last, WHITESPACE);
-
- if (varname.size() == 0) {
- fprintf(stderr, "ERROR: %u: Missing variable name in 'param_check' attribute\n", (unsigned int)lc);
- return -1;
- }
- Var * v = var(varname);
- if (v == NULL) {
- fprintf(stderr, "ERROR: %u: variable %s is not a parameter of %s\n",
- (unsigned int)lc, varname.c_str(), name().c_str());
- return -2;
- }
- // set the size expression into var
- pos = last;
- v->setParamCheckExpression(line.substr(pos));
-
- } else if (token == "dir") {
- pos = last;
- std::string varname = getNextToken(line, pos, &last, WHITESPACE);
- if (varname.size() == 0) {
- fprintf(stderr, "ERROR: %u: Missing variable name in 'dir' attribute\n", (unsigned int)lc);
- return -1;
- }
- Var * v = var(varname);
- if (v == NULL) {
- fprintf(stderr, "ERROR: %u: variable %s is not a parameter of %s\n",
- (unsigned int)lc, varname.c_str(), name().c_str());
- return -2;
- }
-
- pos = last;
- std::string pointerDirStr = getNextToken(line, pos, &last, WHITESPACE);
- if (pointerDirStr.size() == 0) {
- fprintf(stderr, "ERROR: %u: missing pointer directions\n", (unsigned int)lc);
- return -3;
- }
-
- if (pointerDirStr == "out") {
- v->setPointerDir(Var::POINTER_OUT);
- } else if (pointerDirStr == "inout") {
- v->setPointerDir(Var::POINTER_INOUT);
- } else if (pointerDirStr == "in") {
- v->setPointerDir(Var::POINTER_IN);
- } else {
- fprintf(stderr, "ERROR: %u: unknow pointer direction %s\n", (unsigned int)lc, pointerDirStr.c_str());
- }
- } else if (token == "var_flag") {
- pos = last;
- std::string varname = getNextToken(line, pos, &last, WHITESPACE);
- if (varname.size() == 0) {
- fprintf(stderr, "ERROR: %u: Missing variable name in 'var_flag' attribute\n", (unsigned int)lc);
- return -1;
- }
- Var * v = var(varname);
- if (v == NULL) {
- fprintf(stderr, "ERROR: %u: variable %s is not a parameter of %s\n",
- (unsigned int)lc, varname.c_str(), name().c_str());
- return -2;
- }
- int count = 0;
- for (;;) {
- pos = last;
- std::string flag = getNextToken(line, pos, &last, WHITESPACE);
- if (flag.size() == 0) {
- if (count == 0) {
- fprintf(stderr, "ERROR: %u: missing flag\n", (unsigned int) lc);
- return -3;
- }
- break;
- }
- count++;
-
- if (flag == "nullAllowed") {
- if (v->isPointer()) {
- v->setNullAllowed(true);
- } else {
- fprintf(stderr, "WARNING: %u: setting nullAllowed for non-pointer variable %s\n",
- (unsigned int) lc, v->name().c_str());
- }
- } else if (flag == "isLarge") {
- if (v->isPointer()) {
- v->setIsLarge(true);
- } else {
- fprintf(stderr, "WARNING: %u: setting isLarge flag for a non-pointer variable %s\n",
- (unsigned int) lc, v->name().c_str());
- }
- } else {
- fprintf(stderr, "WARNING: %u: unknow flag %s\n", (unsigned int)lc, flag.c_str());
- }
- }
- } else if (token == "custom_pack") {
- pos = last;
- std::string varname = getNextToken(line, pos, &last, WHITESPACE);
-
- if (varname.size() == 0) {
- fprintf(stderr, "ERROR: %u: Missing variable name in 'custom_pack' attribute\n", (unsigned int)lc);
- return -1;
- }
- Var * v = var(varname);
- if (v == NULL) {
- fprintf(stderr, "ERROR: %u: variable %s is not a parameter of %s\n",
- (unsigned int)lc, varname.c_str(), name().c_str());
- return -2;
- }
- // set the size expression into var
- pos = last;
- v->setPackExpression(line.substr(pos));
- } else if (token == "custom_write") {
- pos = last;
- std::string varname = getNextToken(line, pos, &last, WHITESPACE);
-
- if (varname.size() == 0) {
- fprintf(stderr, "ERROR: %u: Missing variable name in 'custom_write' attribute\n", (unsigned int)lc);
- return -1;
- }
- Var * v = var(varname);
- if (v == NULL) {
- fprintf(stderr, "ERROR: %u: variable %s is not a parameter of %s\n",
- (unsigned int)lc, varname.c_str(), name().c_str());
- return -2;
- }
- // set the size expression into var
- pos = last;
- v->setWriteExpression(line.substr(pos));
- } else if (token == "flag") {
- pos = last;
- std::string flag = getNextToken(line, pos, &last, WHITESPACE);
- if (flag.size() == 0) {
- fprintf(stderr, "ERROR: %u: missing flag\n", (unsigned int) lc);
- return -4;
- }
-
- if (flag == "unsupported") {
- setUnsupported(true);
- } else if (flag == "custom_decoder") {
- setCustomDecoder(true);
- } else if (flag == "not_api") {
- setNotApi(true);
- } else if (flag == "flushOnEncode") {
- setFlushOnEncode(true);
- } else {
- fprintf(stderr, "WARNING: %u: unknown flag %s\n", (unsigned int)lc, flag.c_str());
- }
- } else {
- fprintf(stderr, "WARNING: %u: unknown attribute %s\n", (unsigned int)lc, token.c_str());
- }
-
- return 0;
-}