Personal tools
You are here: Home Projects C++ Cfront releases Release 3.0.3 source libSC publik scope.c
Document Actions

scope.c

by Michael L Powell last modified 2007-01-26 03:24

Click here to get the file

Size 2.3 kB - File type text/plain

File contents

/*ident	"@(#)publik:scope.c	3.1" */
/******************************************************************************
*
* C++ Standard Components, Release 3.0.
*
* Copyright (c) 1991, 1992 AT&T and Unix System Laboratories, Inc.
* Copyright (c) 1988, 1989, 1990 AT&T.  All Rights Reserved.
*
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T and Unix System
* Laboratories, Inc.  The copyright notice above does not evidence
* any actual or intended publication of such source code.
*
******************************************************************************/

#ifdef __GNUG__
#pragma implementation "List.h"
#endif
#include "scope.h"
#include "publik.h"
#ifdef __GNUG__
template class List_of_p<Token>;
template class List_of_p<Scope>;
#endif

List_of_p<Scope> scopeStack;

void pushClassScope(String tag)
{
	scopeStack.put(new Scope(classScope, tag));
}

void pushOtherScope()
{
	scopeStack.put(new Scope(otherScope));
}

void popScope()
{
	if (scopeStack.length() == 0)
	{
		ADV;
		syntaxError("unmatched right brace");
	}
	else
	{
		delete (scopeStack.unput());
	}
}

/* Change the current protection level of the immediately containing class to pr
*/
void changePr(TokenType pr)
{
	List_of_piter<Scope> scopeStackI(scopeStack);

	for (scopeStackI.end_reset(); !scopeStackI.at_head(); scopeStackI.step_prev())
	{
		if (scopeStackI.peek_prev()->type == classScope)
		{
			scopeStackI.peek_prev()->pr = pr;
			return;
		}
	}
}

bool_type inClass()
{
	TokenType pr;
	return inClass(pr);
}

bool_type inClass(TokenType &pr)
{
	List_of_piter<Scope> scopeStackI(scopeStack);

	for (scopeStackI.end_reset(); !scopeStackI.at_head(); scopeStackI.step_prev())
	{
		if (scopeStackI.peek_prev()->type == classScope)
		{
			pr = scopeStackI.peek_prev()->pr;
			return yes;
		}
	}
	return no;
}


/* returns true just if we're in a public section of a class, 
*  which is in a public section of its containing class, ...
*/
bool_type inUpwardlyPublicPartOfClass()
{
	bool_type inClass = no;
	List_of_piter<Scope> scopeStackI(scopeStack);

	for (scopeStackI.end_reset(); !scopeStackI.at_head(); scopeStackI.step_prev())
	{
		if (scopeStackI.peek_prev()->type == classScope)
		{
			inClass = yes;
			if (scopeStackI.peek_prev()->pr != PUBLIC)
				return no;
		}
	}
	return inClass;
}	

#ifdef __GNUG__
#include <iostream.h>
ostream& operator<<(ostream &os, const Scope &) { return os; }
#endif
« December 2014 »
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: