All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

Commit 3c46c2ca authored by Sarah Spall's avatar Sarah Spall Committed by Vikram Narayanan

switching branch

parent 8a1f8a00
......@@ -45,13 +45,14 @@ Type * RootScope::lookup_symbol(const char * sym, int* err)
std::string temp = sym;
if(this->types_->find(temp) == this->types_->end())
{
// printf("looking up %s\n", sym);
// printf("is empty? %d\n", this->types_->size());
*err = 0;
return 0;
}
else
return (*(this->types_))[temp];
{
*err = 1;
return (*(this->types_))[temp];
}
}
int RootScope::insert_symbol(const char* sym, Type * value)
......@@ -67,13 +68,16 @@ int RootScope::insert_symbol(const char* sym, Type * value)
Type* FileScope::lookup_symbol(const char* sym, int* err)
{
std::string temp = sym;
// lookup here or root first?
if(types_->find(temp) == types_->end())
if(this->types_->find(temp) == this->types_->end())
{
// error
return this->root_->lookup_symbol(sym, err);
}
else
return (*types_)[temp];
{
*err = 1;
return (*types_)[temp];
}
}
......@@ -82,10 +86,9 @@ int FileScope::insert_symbol(const char* sym, Type* value)
std::string temp = sym;
// redefinition of something at root scope?
std::pair<std::map<std::string,Type*>::iterator, bool> ret;
ret = types_->insert(std::pair<std::string,Type*>(temp, value));
return ret.second;
// filescope map not rootscope
ret = this->types_->insert(std::pair<std::string,Type*>(temp, value));
return ret.second;
}
FileScope::FileScope(RootScope* root)
......
#include "gen_visitor.h"
SourceVisitor::SourceVisitor(FILE* out, int stub_proxy)
{
this->out_f_ = out;
this->stub_or_proxy_ = stub_proxy;
}
void SourceVisitor::visit(File* f)
{
for(std::vector<Rpc*>::iterator it = f->rpc_defs()->begin(); it != f->rpc_defs()->end(); it++)
{
Rpc* r = (Rpc*) *it;
r->accept(this);
fprintf(this->out_f_, "\n\n");
}
}
void SourceVisitor::visit(Rpc* r)
{
Type* rt = r->return_type();
printf("here in hv hisit rpc\n");
printf("%d\n", rt->num());
rt->accept(this); // this seems unnecessary in this case
const char* name = r->name();
fprintf(this->out_f_, " %s(", name);
for(std::vector<Parameter*>::iterator it = r->parameters()->begin(); it != r->parameters()->end(); it++)
{
Parameter* p = (Parameter*) *it;
p->accept(this);
if((it+1) != r->parameters()->end())
fprintf(this->out_f_, ", ");
}
fprintf(this->out_f_, ") {\n");
// print body
// TODO
fprintf(this->out_f_, "}\n");
}
void SourceVisitor::visit(Parameter* p)
{
p->type()->accept(this);
// print p->name_
fprintf(this->out_f_, " %s", p->name());
}
void SourceVisitor::visit(ProjectionType *p)
{
fprintf(this->out_f_, "%s", p->real_type());
}
void SourceVisitor::visit(ProjectionField *pf)
......@@ -23,12 +58,19 @@ void SourceVisitor::visit(ProjectionField *pf)
void SourceVisitor::visit(IntegerType *it)
{
if(it->unsigned_huh())
fprintf(this->out_f_, "unsigned ");
fprintf(this->out_f_, "%s", it->type());
}
void SourceVisitor::visit(PointerType *pt)
{
pt->type()->accept(this);
fprintf(this->out_f_, "* ");
}
void SourceVisitor::visit(Typedef* td)
{
fprintf(this->out_f_, "%s", td->alias());
}
......@@ -35,9 +35,10 @@ class HeaderVisitor : public GenVisitor
class SourceVisitor : public GenVisitor
{
// FILE* out_f_;
public:
SourceVisitor(FILE* f);
FILE* out_f_;
int stub_or_proxy_; // 1 equals stub, 2 equals proxy
public:
SourceVisitor(FILE* out, int stub_proxy);
virtual void visit(File *f);
virtual void visit(Rpc *rpc);
virtual void visit(Parameter * p);
......
......@@ -4,10 +4,13 @@
#include <string>
namespace Parser{
/* filename should be a path to a file */
extern const void * parse(const std::string & filename, bool stats = false);
......
module name {
projection super_block<struct super_block> {
[in] int field1;
}
}
rpc int foo(capability cpa, char v1, int v2);
rpc int foo(int cpa, char v1, int v2);
rpc int bar(projection super_block * rp);
rpc int bar(projection super_block* rp);
......@@ -2,24 +2,26 @@
from os import getcwd, listdir
from os.path import join
from subprocess import call, check_output
from subprocess import check_call, check_output, CalledProcessError
def main():
print("in main")
test_dir = getcwd()
comp_dir = "../compiler"
current_dir = getcwd()
test_dir = join(current_dir, "test")
comp_dir = join(current_dir, "compiler")
out_dir = join(test_dir, "out")
for file in listdir(test_dir):
print("in loop: " + file)
if file.endswith(".idl"):
try:
result = check_output([comp_dir, '-header', file], timeout=2)
print("in try")
except:
print("in except")
pass
print("in loop: " + file)
idl_file = join("test", file)
out_file = join("test", file+".h")
print(out_file)
print(idl_file)
check_call([comp_dir, '-header', idl_file, '-out', out_file])
except Exception as e:
print("f")
if __name__ == '__main__':
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment